Tutorial: Integrar el seguimiento en ASP.NET con las técnicas de seguimiento de System.Diagnostics

Actualización: noviembre 2007

En este tutorial se describe cómo integrar las técnicas de seguimiento de ASP.NET con las técnicas de seguimiento System.Diagnostics y escribir todos los mensajes de seguimiento en un resultado de seguimiento único.

Puede utilizar el seguimiento para hacer un seguimiento del flujo de ejecución de su aplicación, mostrar datos en puntos críticos del ciclo de vida de un formulario Web Forms y descubrir cómo interactúan los formularios Web Forms con otros componentes de la aplicación. Mediante el seguimiento puede examinar los parámetros de solicitud HTTP que se envían a su aplicación, cuánta memoria se está almacenando en el estado de vista para un formulario Web Forms determinado y otra información útil para la elaboración de perfiles.

El mecanismo de seguimiento de ASP.NET escribe los mensajes que se muestran en páginas Web ASP.NET y en el visor de seguimiento de ASP.NET (Trace.axd), mientras que la clase Trace se utiliza para escribir mensajes de seguimiento en el resultado de seguimiento estándar de .NET Framework (normalmente una ventana de consola). Para facilitar el seguimiento de la interacción entre los formularios Web Forms, los objetos comerciales y el resto de los componentes, puede integrar el resultado de seguimiento de ASP.NET con el seguimiento de System.Diagnostics para enrutar todos los mensajes de seguimiento hacia uno de estos resultados.

Entre los escenarios más comunes que utilizan tanto el seguimiento en ASP.NET como la clase Trace están las páginas Web que utilizan objetos comerciales de nivel medio para interactuar con datos y reglas de negocios, y páginas que utilizan servicios empresariales como transacciones y colas. En estas situaciones, los componentes empresariales y de negocios desempeñan un papel clave en la correcta ejecución de la página y es deseable la supervisión del flujo de ejecución de las páginas a través de varios niveles de la aplicación con un único resultado de seguimiento.

En este tutorial trabajará con el seguimiento. Modificará una página Web y un objeto comercial para escribir mensajes de seguimiento y, a continuación, enrutará todos los mensajes a un resultado de seguimiento.

Entre las tareas ilustradas en este tutorial se incluyen las siguientes:

  • Crear un componente comercial personalizado que puede devolver datos a una página Web. El componente lee los datos de un archivo XML.

  • Crear una página Web que hace referencia al objeto comercial personalizado como un origen de datos.

  • Habilitar el seguimiento para la página Web que hace referencia al objeto comercial.

  • Escribir mensajes de seguimiento en la página Web que hace referencia al objeto comercial.

  • Escribir mensajes de Trace en un objeto comercial personalizado.

  • Configurar una aplicación ASP.NET para que escriba todos los mensajes de seguimiento en un único resultado.

  • Leer el resultado del seguimiento.

Requisitos previos

Para poder completar este tutorial, necesitará lo siguiente:

  • Microsoft .NET Framework y un sitio Web de ASP.NET existente.
Nota:

En este tutorial no se da por supuesto que está utilizando un diseñador, como la herramienta de desarrollo Web Microsoft Visual Web Developer o Microsoft Visual Studio.

Crear una página Web y un objeto comercial

En este tutorial creará la página Web Default.aspx, un objeto comercial AuthorClass y el archivo de datos XML Authors.xml que se necesita en pasos posteriores de este tutorial en los que hay que realizar un seguimiento.

Puede copiar y pegar el código fuente en los archivos del directorio ASP.NET. Esto creará la página Web Default.aspx, el objeto comercial , AuthorClass y el archivo Authors.xml.

Para crear la página Default.aspx

  1. Abra un editor de texto, como el Bloc de notas, y cree un nuevo archivo.

  2. Escriba el código siguiente en el archivo.

    <%@ Page Language="VB" %>
    <html>
    <form >
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
    
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
    
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
    <%@ Page Language="C#" %>
    <html>
    <form >
        <asp:objectdatasource
          id="AuthorsObjectDataSource"
    
          typename="PubsClasses.AuthorClass"
          selectmethod="GetAuthors"/>
    
        <asp:gridview
          id="GridView1"
    
          datasourceid="AuthorsObjectDataSource" />
    </form>
    </html>
    
  3. Guarde el archivo en el directorio raíz de la aplicación ASP.NET como Default.aspx.

La página Default.aspx utiliza un objeto comercial denominado AuthorClass para interactuar con los datos XML.

Para crear el objeto comercial AuthorClass

  1. Bajo el directorio raíz de la aplicación, cree un directorio denominado App_Code.

  2. En un editor de texto, como el Bloc de notas, abra un nuevo archivo.

  3. Escriba el código siguiente en el archivo.

    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Web
    Imports System.Data
    Namespace PubsClasses
        Public Class AuthorClass
            Private dsAuthors As DataSet = _
                New System.Data.DataSet("ds1")
            Private filePath As String = _
               HttpContext.Current.Server.MapPath("~/App_Data/authors.xml")
            Public Sub New()
                dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema)
            End Sub
    
            Public Function GetAuthors() As DataSet
                Return dsAuthors
            End Function
        End Class
    End Namespace
    
    using System;
    using System.Web;
    using System.Data;
    namespace PubsClasses
    {
        public class AuthorClass
        {
            private DataSet dsAuthors = new DataSet("ds1");
            private String filePath =
                HttpContext.Current.Server.MapPath("~/App_Data/authors.xml");
    
            public AuthorClass()
            {
                dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema);
            }
    
            public DataSet GetAuthors ()
            {
                return dsAuthors;
            }
        }
    }
    
  4. En el directorio App_Code, guarde el archivo como AuthorClass.cs (para C#) o AuthorClass.vb (para Microsoft Visual Basic).

El archivo de datos que utiliza AuthorClass es Authors.xml.

Para habilitar el seguimiento y mostrar mensajes de seguimiento de ASP.NET

  1. Bajo el directorio raíz de la aplicación, cree un directorio denominado App_Data.

  2. En un editor de texto, como el Bloc de notas, abra un nuevo archivo.

  3. Escriba los datos XML siguientes en el archivo.

    El archivo XML incluye información de esquema que identifica la estructura de base de datos de los datos. Esto incluye una restricción de clave principal para la clave.

    Nota:

    Los componentes comerciales pueden trabajar con datos de cualquier forma que sea adecuada para su aplicación. En este tutorial se utiliza un archivo XML por comodidad.

    <?xml version="1.0" standalone="yes"?>
    <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd">
    <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
        <xs:element name="dsPubs" msdata:IsDataSet="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="authors">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="au_id" type="xs:string" />
                    <xs:element name="au_lname" type="xs:string" />
                    <xs:element name="au_fname" type="xs:string" />
                    <xs:element name="au_phone" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
          <xs:unique name="Constraint1" msdata:PrimaryKey="true">
            <xs:selector xpath=".//mstns:authors" />
            <xs:field xpath="mstns:au_id" />
          </xs:unique>
        </xs:element>
      </xs:schema>
      <authors>
        <au_id>172-32-1176</au_id>
        <au_lname>White</au_lname>
        <au_fname>Gerry</au_fname>
        <au_phone>408 496-7223</au_phone>
      </authors>
      <authors>
        <au_id>213-46-8915</au_id>
        <au_lname>Green</au_lname>
        <au_fname>Marjorie</au_fname>
        <au_phone>415 986-7020</au_phone>
      </authors>
    </dsPubs>
    
  4. En el directorio App_Data, guarde el archivo como Authors.xml y, a continuación, ciérrelo.

Agregar mensajes de seguimiento a una página Web y un objeto comercial

Cuando haya creado la página Default.aspx, el archivo de datos Authors.xml y el objeto comercial AuthorClass, puede empezar a trabajar con el seguimiento. Antes de agregar cualquier mensaje de seguimiento al código, habilite el seguimiento para la página Default.aspx.

Para habilitar el seguimiento y mostrar mensajes de seguimiento de ASP.NET

  1. En un editor de texto, como el Bloc de notas, abra la página Default.aspx.

  2. Agregue un atributo Trace a la directiva @ Page y, a continuación, establezca Trace en true.

    La declaración habilita el seguimiento de ASP.NET para la página Web.

    Para obtener más información, vea Cómo: Habilitar el seguimiento de una página ASP.NET.

El seguimiento de la página está ahora habilitado y, cuando vea la página en un explorador Web, verá que el control GridView va seguido del resultado de seguimiento. La segunda tabla de seguimiento que se muestra, Información de seguimiento, presenta información detallada acerca de la ruta de ejecución para la página Web.

Para obtener más información acerca de cómo leer el resultado del seguimiento, vea el tema Leer la información de seguimiento de ASP.NET.

Escribir mensajes de seguimiento

Para comprender mejor dónde se producen ciertas acciones básicas de ASP.NET, como el enlace a datos que realiza el control GridView en la página Default.aspx, agregue mensajes de seguimiento a la página Web y el objeto comercial AuthorClass.

Para escribir mensajes de seguimiento desde un formulario Web Forms

  • En su página Web Default.aspx, escriba el código siguiente después de la directiva @ Page pero antes de la etiqueta <html>.

    <script >
    
    Private Sub Page_Load(sender As Object, e As EventArgs)    
        Trace.WriteLine("ASP.NET TRACE","page_load called.")
        Trace.WriteLine("ASP.NET TRACE","page_load finished.")
    End Sub ' Page_Load
    
    </script>
    
    <script >
    private void page_load(object sender, EventArgs e) {
    
        Trace.WriteLine("ASP.NET TRACE","page_load called.");
        Trace.WriteLine("ASP.NET TRACE","page_load finished.");
    }
    </script>
    
    Nota:

    Quizás tenga que incluir un atributo de lenguaje en la directiva @ Page, dependiendo del lenguaje que utilice.

Estos mensajes de seguimiento se escriben en el resultado de seguimiento de ASP.NET y, cuando vuelva a ver la página Default.aspx, verá los mensajes de seguimiento en la sección Información de seguimiento, entre "Begin Load" y "End Load". "Begin Load" y "End Load" están asociados al método Page_Load.

Ahora agregará mensajes de seguimiento al objeto comercial, AuthorClass.

Para escribir mensajes de seguimiento en el objeto comercial AuthorClass

  1. Escriba el código siguiente en el constructor AuthorClass.

    System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE")
    
    System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE");
    
  2. Escriba el código siguiente en el método AuthorClass.GetAuthors.

    System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE")
    
    System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE");
    
    Nota:

    Cuando utiliza el método TraceContext.Write de ASP.NET, la categoría de seguimiento aparece delante del mensaje de seguimiento en la lista de parámetros para el método. Sin embargo, cuando utiliza el método de seguimiento Write de .NET Framework, el mensaje de seguimiento aparece delante de la categoría de seguimiento.

Si compila el objeto comercial que tiene la opción del compilador TRACE, estos mensajes de seguimiento se escribirán en el resultado del seguimiento del sistema. Los mensajes de seguimiento no se escriben en la página Default.aspx, como ocurre con los mensajes de seguimiento de ASP.NET. Para probarlo, vea la página Default.aspx y compruebe que sólo aparecen los mismos mensajes "ASP.NET TRACE" en la tabla Información de seguimiento que vio anteriormente.

En la próxima sección aprenderá a configurar su aplicación Web ASP.NET para que se compile automáticamente con la opción TRACE habilitada y para enrutar todos los mensajes de seguimiento a la página Web.

Enrutar todo el resultado de seguimiento al formulario Web Forms

El enrutamiento de los mensajes de Trace contenidos en el objeto comercial AuthorClass hacia el resultado de seguimiento de ASP.NET puede mostrarle cuándo se crea y manipula AuthorClass durante el procesamiento de la solicitud, y le ofrece una vista más holística de lo que está haciendo la aplicación. Para enrutar los mensajes de Trace a una página Web ASP.NET, debe agregar un objeto WebPageTraceListener. Puede agregar un agente de escucha de seguimiento a través de la configuración (método recomendado) o mediante programación. Para obtener más información acerca de cómo agregar un agente de escucha de seguimiento mediante la configuración, vea Elemento <listeners> para <trace>.

Para realizar el procedimiento siguiente necesitará un archivo Web.config. Si ya tiene un archivo Web.config, omita el próximo procedimiento y vaya al siguiente, en el que agregará un objeto WebPageTraceListener.

Para crear un archivo Web.config

  1. Abra un editor de texto, como el Bloc de notas, y cree un nuevo archivo.

  2. Escriba el texto siguiente en el archivo.

    <!-- Web.Config Configuration File -->
    <configuration>
        <system.web>
            <customErrors mode="Off"/>
        </system.web>
    </configuration>
    
  3. Guarde el archivo en el mismo directorio que Default.aspx como Web.config.

Después agregará un objeto WebPageTraceListener a su aplicación para enrutar los mensajes de Trace al resultado de seguimiento de ASP.NET.

Para agregar WebPageTraceListener para su aplicación a través de la configuración

  1. Abra el archivo Web.config de la aplicación.

  2. Coloque el código siguiente en el archivo Web.config después de la sección <system.web>.

    <system.diagnostics>
      <trace>
        <listeners>
           <add name="WebPageTraceListener" 
                type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        </listeners>
      </trace>
    </system.diagnostics>
    

    En esta sección de configuración se agrega un objeto WebPageTraceListener a la colección de agentes de escucha de seguimiento para la aplicación.

Agregar un WebPageTraceListener utilizando el archivo de configuración para la aplicación es el método recomendado para agregar un agente de escucha de seguimiento. Sin embargo, también puede agregar el agente de escucha de seguimiento mediante programación, lo que resulta especialmente útil si está utilizando una lógica compleja de seguimiento y distintos tipos de agentes de escucha para el seguimiento de su aplicación, y WebPageTraceListener es sólo uno de ellos.

Si desea agregar un agente de escucha de seguimiento a su aplicación mediante programación, cree un archivo Global.asax y agregue el agente de escucha siguiendo estos pasos.

Para crear un archivo Global.asax y agregar un agente de escucha de seguimiento mediante programación

  1. Abra un editor de texto, como el Bloc de notas, y cree un nuevo archivo.

  2. Escriba el código siguiente en el archivo.

    <%@ Application Language="VB" %>
    <%@ Import Namespace="System.Web" %>
    
    <script >
      Sub Application_Start(sender As Object, e As EventArgs) 
        ' Code that runs when the application is started.
      End Sub
    
      Sub Application_End(sender As Object, e As EventArgs)
        ' Code that runs when the application shuts down.
      End Sub    
    </script>
    
    <%@ Application Language="C#" %>
    <%@ Import Namespace="System.Web" %>
    
    <script >
    
        void Application_Start(Object sender, EventArgs e) {
            // Code that runs when the application is started.
        }
    
        void Application_End(Object sender, EventArgs e) {
            // Code that runs when the application shuts down.
        }        
    </script>
    
  3. En el directorio raíz de la aplicación, guarde el archivo como Global.asax.

    Esto crea un archivo Global.asax básico, que es un módulo compilado que contiene código que se ejecuta siempre que se inicia o se detiene la aplicación.

  4. Escriba el código siguiente en el método Application_Start del archivo Global.asax.

    ' Create a trace listener for Web forms.
    Dim gbTraceListener As New WebPageTraceListener()
    ' Add the event log trace listener to the collection.
    System.Diagnostics.Trace.Listeners.Add(gbTraceListener)
    
    // Create a trace listener for Web forms.
    WebPageTraceListener gbTraceListener = new WebPageTraceListener();
    // Add the event log trace listener to the collection.
    System.Diagnostics.Trace.Listeners.Add(gbTraceListener);
    

    Esto agrega mediante programación un WebPageTraceListener a la colección de agentes de escucha de seguimiento para su aplicación.

  5. En el mismo directorio que Default.aspx, guarde el archivo como Global.aspx.

Con estos pasos ha agregado un WebPageTraceListener a la colección de agentes de escucha de seguimiento para la aplicación. Si bien ASP.NET muestra mensajes de seguimiento siempre que el seguimiento está habilitado para una página, los mensajes de seguimiento de System.Diagnostics sólo se escriben cuando el código en el que residen los mensajes de seguimiento se compila utilizando un modificador explícito del compilador: el modificador TRACE. Es decir, si no compila explícitamente el objeto AuthorClass utilizando el modificador TRACE, no verá los mensajes de seguimiento, incluso aunque se agregue WebPageTraceListener.

Puede configurar la aplicación para que se compile automáticamente utilizando el modificador TRACE; para ello debe agregar una nueva sección al archivo Web.config.

Para compilar automáticamente su aplicación con el seguimiento habilitado

  1. Abra el archivo Web.config de la aplicación.

  2. Coloque el código siguiente en el archivo Web.config después de la sección <system.diagnostics>.

    <system.codedom>
      <compilers>
        <compiler language="c#;cs;csharp" 
                  extension=".cs" 
                  compilerOptions="/d:TRACE"
                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" />
        <compiler language="VB"
                  extension=".vb" 
                  compilerOptions="/d:Trace=true"
                  type="Microsoft.VisualBasic.VBCodeProvider, System,                                        Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </compilers>
    </system.codedom>
    

    De forma predeterminada, esta sección de configuración hace que su aplicación compile todos los módulos con la opción TRACE.

Si examina ahora la página Default.aspx, verá los mensajes de seguimiento tanto de ASP.NET como de System.Diagnostics. Si los mensajes de seguimiento de ASP.NET y de System.Diagnostics no aparecen, quizás tenga que volver a compilar el objeto AuthorClass.

En la información de seguimiento puede ver que se crea el objeto AuthorClass y se llama a su método GetAuthors durante el método PreRender del ciclo de vida de la página Web. También puede ver que transcurre bastante tiempo desde que se crea el objeto AuthorClass; la diferencia de tiempo entre el mensaje "Begin PreRender" y el mensaje "AuthorClass is created." es importante. Esto se debe a que AuthorClass abre el archivo Authors.xml e inicializa su DataSet durante la creación, que es una operación relativamente costosa.

En la próxima sección aprenderá a configurar su aplicación Web ASP.NET para que enrute todos los mensajes de seguimiento al resultado de seguimiento de .NET Framework.

Enrutar todo el resultado de seguimiento al seguimiento de .NET Framework

Quizás desee enrutar los mensajes de seguimiento de ASP.NET al resultado estándar para los mensajes de Trace, que puede ser una ventana de consola, el disco, el registro de sucesos de Windows o cualquier otro resultado de mensajes de seguimiento. Puede habilitar este enrutamiento de mensajes en el archivo de configuración Web.config.

Para enrutar todos los mensajes de seguimiento de ASP.NET al resultado de seguimiento del sistema

  1. Abra el archivo Web.config de la aplicación.

  2. Agregue un nuevo atributo, writeToDiagnosticsTrace, al elemento de seguimiento bajo <system.web> y establezca writeToDiagnosticsTrace en true.

        <system.web>
          <trace writeToDiagnosticsTrace="true"/>
          <customErrors mode="Off"/>
        </system.web>
    

    Este atributo de configuración indica al seguimiento de ASP.NET que enrute los mensajes de seguimiento de ASP.NET al mecanismo estándar de resultados del seguimiento del sistema.

    Para ver los mensajes de seguimiento de ASP.NET y de System.Diagnostics en un contexto fuera de una página ASP.NET, utilice un objeto TextWriterTraceListener para escribir los mensajes de seguimiento a un archivo.

    El objeto TextWriterTraceListener debe configurarse para escribir en un archivo concreto. Puede hacerlo utilizando el atributo initializeData de Elemento <add> de <listeners> de <trace>.

  3. Utilice los mismos pasos que siguió para agregar el objeto WebPageTraceListener en el segundo procedimiento de "Enrutar todo el resultado de seguimiento al formulario Web Forms", anteriormente en este tutorial, para agregar un objeto TextWriterTraceListener al archivo Web.config y configure TextWriterTraceListener para que escriba en un archivo del directorio raíz de la aplicación denominado Asptesttrace.log.

    Suponiendo que no agregara WebPageTraceListener mediante programación al archivo Global.asax, la sección <system.diagnostics> del archivo Web.config será similar a la siguiente:

    <system.diagnostics>    
      <trace autoflush="true">
        <listeners>
          <add name="WebPageTraceListener" 
            type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          <add name="TestTracer" 
            type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
            initializeData="<app root directory>\Asptesttrace.log" />
        </listeners>
      </trace>
    </system.diagnostics>
    
    Nota:

    El atributo initializeData del paso anterior tiene un valor marcador de posición para el directorio raíz de la aplicación ASP.NET. Si intenta escribir los mensajes de seguimiento en un archivo que no esté en el directorio raíz de la aplicación, quizás reciba una excepción de seguridad. De forma predeterminada, ASP.NET no permite escribir archivos en ubicaciones del disco que estén fuera del directorio raíz de la aplicación, como C:\. Además, quizás tenga que conceder permiso de escritura al registro de seguimiento para la cuenta del proceso de trabajo de ASP.NET.

    De forma predeterminada, debe esperar hasta que se llene el búfer de seguimiento antes de que la información de seguimiento se escriba en la secuencia de destino.

  4. Para ver los datos de seguimiento del registro de seguimiento inmediatamente después de solicitar su página ASP.NET, vacíe el búfer con cada escritura de seguimiento estableciendo el atributo autoflush en true como hizo en el paso anterior.

    El valor predeterminado para el atributo autoflush es false.

  5. Para vaciar mediante programación el búfer de información de seguimiento, llame al método Flush.

    Nota:

    Para el objeto comercial que creó en este tutorial, si llama al método Flush en el método Page_Load y el atributo autoflush es false, el registro de seguimiento no mostrará los datos de seguimiento porque el objeto comercial se representa una vez que se produce el evento Load de la página.

Pasos siguientes

En este tutorial se ha mostrado cómo trabajar con las características de seguimiento de ASP.NET y de System.Diagnostics para enrutar todos los mensajes de seguimiento a un resultado único. Quizás desee experimentar más con los agentes de escucha de seguimiento y con el resultado, así como con las características de instrumentación de ASP.NET. Por ejemplo, puede hacer lo siguiente:

  • Agregar un objeto EventLogTraceListener a su aplicación.

    Para ello, agregaría un objeto EventLogTraceListener mediante programación o utilizando el archivo de configuración que usa el mismo procedimiento que para WebPageTraceListener. Puede abrir el Registro de sucesos para examinar los mensajes de seguimiento que su aplicación escribe en él.

  • Cambiar el componente comercial para trabajar con datos de la base de datos en lugar de con un archivo XML. No necesita realizar ningún cambio en los controles de la página.

Vea también

Otros recursos

Seguimiento en ASP.NET

Leer la información de seguimiento de ASP.NET

Información general sobre el seguimiento de ASP.NET en la aplicación