Comparteix a través de


Traza analítica de WCF

El ejemplo WCFAnalyticTracingExtensibility muestra cómo agregar sus propios eventos de seguimiento al flujo de seguimiento analítico que Windows Communication Foundation (WCF) escribe en ETW en .NET Framework. Los seguimientos analíticos pretenden facilitar la visibilidad en los servicios sin que el rendimiento se vea penalizado. Este ejemplo muestra cómo utilizar las API System.Diagnostics.Eventing para escribir eventos que se integren con los servicios WCF.

Para obtener más información sobre las API System.Diagnostics.Eventing, consulte System.Diagnostics.Eventing.

Para obtener más información acerca del seguimiento de eventos en Windows, consulte Mejorar el ajuste de la depuración y el rendimiento con ETW.

Eliminar EventProvider

En este ejemplo se usa la clase System.Diagnostics.Eventing.EventProvider, que implementa el objeto System.IDisposable. Al implementar el seguimiento para un servicio WCF, es probable que pueda utilizar los recursos de EventProvider mientras dure el servicio. Por esta razón y para conservar la legibilidad, este ejemplo nunca elimina el objeto EventProvider ajustado. Si por alguna razón su servicio tiene requisitos diferentes para el seguimiento y debe desechar este recurso, debe modificar este ejemplo de acuerdo con los procedimientos recomendados para desechar recursos no administrados. Para obtener más información sobre cómo eliminar recursos no administrados, consulte Implementación de un método Dispose.

Autohospedamiento y hospedamiento en web

Para los servicios hospedados en web, los seguimientos analíticos de WCF proporcionan un campo, denominado "HostReference", que se utiliza para identificar el servicio que emite los seguimientos. Los seguimientos extensibles de usuario pueden participar en este modelo; este ejemplo muestra los procedimientos recomendados para ello. El formato de una referencia a un host web cuando la barra vertical (|) aparece realmente en la cadena resultante puede ser cualquiera de los siguientes:

  • Si la aplicación no está en la raíz.

    <nombreDeSitio><rutaDeAccesoVirtualDeAplicación>|<rutaDeAccesoVirtualDeServicio>|<nombreDeServicio>

  • Si la aplicación está en la raíz.

    <nombreDeSitio>|<rutaDeAccesoVirtualDeServicio>|<nombreDeServicio>

En los servicios autohospedados, los seguimientos analíticos de WCF no rellenan el campo "HostReference". La clase WCFUserEventProvider de este ejemplo se comporta de forma coherente cuando se utiliza en un servicio autohospedado.

Detalles de eventos personalizados

El manifiesto del proveedor de eventos ETW de WCF define tres eventos que están diseñados para que los emitan los autores de los servicios WCF desde el código del servicio. La siguiente tabla muestra un desglose de los tres eventos:

Evento Descripción Id. de evento
UserDefinedInformationEventOccurred Emita este evento cuando ocurra algo en un servicio que no constituya un problema. Por ejemplo, podría emitir un evento después de realizar una llamada a una base de datos correctamente. 301
UserDefinedWarningOccurred Emita este evento cuando se produzca un problema que pueda provocar un error en el futuro. Por ejemplo, puede emitir un evento de advertencia cuando se produce un error en una llamada a una base de datos pero se pudo recuperar retirándose a un almacén de datos redundante. 302
UserDefinedErrorOccurred Emita este evento cuando el servicio no se comporte como se preveía. Por ejemplo, podría emitir un evento si se produce un error en una llamada a una base de datos y no pudo recuperar los datos de otro lugar. 303

Para utilizar este ejemplo

  1. En Visual Studio, abra el archivo de solución WCFAnalyticTracingExtensibility.sln.

  2. Presione Ctrl+Mayús+B para compilar la aplicación.

  3. Para ejecutar la solución, presione CTRL+F5.

    En el explorador web, haga clic en Calculator.svc. El URI del documento WSDL para el servicio debería aparecer en el explorador. Copie ese URI.

  4. Ejecute el Cliente de prueba WCF (WcfTestClient.exe).

    El Cliente de prueba WCF (WcfTestClient.exe) se encuentra en \<Visual Studio Install Dir>\Common7\IDE\WcfTestClient.exe.

  5. Dentro del Cliente de prueba WCF, agregue el servicio. Para ello, seleccione Archivo y elija Agregar servicio.

    Agregue la dirección del punto de conexión en el cuadro de entrada.

  6. Haga clic en Aceptar para cerrar el cuadro de diálogo.

    El servicio ICalculator se agrega en el panel izquierdo en Mis proyectos de servicios.

  7. Abra la aplicación Visor de eventos.

    Antes de invocar el servicio, inicie el Visor de eventos y asegúrese de que el registro de eventos escucha los eventos de seguimiento emitidos por el servicio WCF.

  8. En el menú Inicio, seleccione Herramientas administrativas, Visor de eventos. Habilite los registros Analítico y Depuración.

  9. En la vista de árbol del Visor de eventos, vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Servidor de aplicaciones-Aplicaciones. Haga clic con el botón derecho en Servidor de aplicaciones-Aplicaciones, seleccione Ver y, después, Mostrar registros analíticos y de depuración.

    Asegúrese de que esté activada la opción Mostrar registros analíticos y de depuración. Habilite el registro Analítico.

    En la vista de árbol del Visor de eventos, vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Servidor de aplicaciones-Aplicaciones, Analítico. Haga clic con el botón derecho en el elemento Analítico y seleccione Habilitar registro.

  10. Pruebe el servicio con el Cliente de prueba WCF.

    1. En el Cliente de prueba WCF, haga doble clic en Add() en el nodo del servicio ICalculator.

      El método Add() aparece en el panel derecho con dos parámetros.

    2. Escriba 2 en el primer parámetro y 3 en el segundo.

    3. Haga clic en Invocar para invocar el método.

  11. Vaya a la ventana del Visor de eventos que ha abierto. Vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Aplicaciones de servidor-Aplicaciones.

  12. Haga clic con el botón derecho en el nodo Analítico y seleccione Actualizar.

    Los eventos aparecen en el panel derecho.

  13. Busque el evento con el identificador 303 y haga doble clic en él para abrirlo e inspeccionar su contenido.

    Este evento fue emitido por el método Add() del servicio ICalculator y tenía una carga igual a "2+3=5".

Para realizar la limpieza (Opcional)

  1. Abra Visor de eventos.

  2. Vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Aplicaciones de servidor-Aplicaciones. Haga clic con el botón derecho en Analítico y seleccione Deshabilitar registro.

  3. Vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Aplicaciones de servidor-Aplicaciones, Analítico. Haga clic con el botón derecho en Analítico y seleccione Borrar registro.

  4. Haga clic en Borrar para borrar los eventos.

Problema conocido

Hay un problema conocido en el Visor de eventos por el que el visor no puede descodificar eventos de ETW. Puede obtener el siguiente mensaje de error: "No se encuentra la descripción del id. de evento <id> en el origen Microsoft-Windows-Application Server-Applications. El componente que provoca este evento no está instalado en el equipo local o la instalación está dañada. Puede instalar o reparar el componente en el equipo local". Si encuentra este error, seleccione Actualizar en el menú Acciones. El evento debería descodificarse entonces correctamente.

Consulte también