Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo EtwTracking se muestra cómo habilitar el seguimiento de Windows Workflow Foundation (WF) en un servicio de flujo de trabajo y emitir los eventos de seguimiento en seguimiento de eventos para Windows (ETW). Para emitir registros de seguimiento de flujo de trabajo en ETW, el ejemplo usa el participante de seguimiento de ETW (EtwTrackingParticipant).
El flujo de trabajo del ejemplo recibe una solicitud, asigna la recíproca de los datos de entrada a la variable de entrada y devuelve la recíproca al cliente. Cuando los datos de entrada son 0, se produce una excepción de división por cero que no se maneja y que hace que el flujo de trabajo se aborte. Con el seguimiento habilitado, el registro de seguimiento de errores se emite a ETW, lo que puede ayudar a solucionar el error más adelante. El participante de seguimiento de ETW se configura con un perfil de seguimiento para suscribirse a registros de seguimiento. El perfil de seguimiento se define en el archivo Web.config y se proporciona como parámetro de configuración para el participante de seguimiento de ETW. El participante de seguimiento de ETW se configura en el archivo Web.config del servicio de flujo de trabajo y se aplica al servicio como un comportamiento del servicio. En este ejemplo, verá los eventos de seguimiento en el registro de eventos mediante el Visor de eventos.
Detalles de seguimiento de flujo de trabajo
Windows Workflow Foundation proporciona una infraestructura de seguimiento para realizar un seguimiento de la ejecución de una instancia de flujo de trabajo. El tiempo de ejecución de seguimiento crea una instancia de flujo de trabajo para emitir eventos relacionados con el ciclo de vida de flujo de trabajo, eventos procedentes de actividades de flujo de trabajo y eventos personalizados. En la tabla siguiente se detallan los componentes principales de la infraestructura de seguimiento.
Componente | Descripción |
---|---|
Seguimiento del tiempo de ejecución | Proporciona la infraestructura para emitir registros de seguimiento. |
Seguimiento de participantes | Accede a los registros de seguimiento. .NET Framework 4.6.1 se distribuye con un participante de seguimiento que escribe los eventos de seguimiento como eventos de Seguimiento de eventos para Windows (ETW). |
Perfil de seguimiento | Mecanismo de filtrado que permite a un participante de seguimiento suscribirse a un subconjunto de los registros de seguimiento emitidos desde una instancia de flujo de trabajo. |
En la tabla siguiente se detallan los registros de seguimiento que emite el tiempo de ejecución del flujo de trabajo.
Registro de seguimiento | Descripción |
---|---|
Registros de seguimiento de instancias de flujo de trabajo. | Describe el ciclo de vida de la instancia de flujo de trabajo. Por ejemplo, se genera un registro de instancia cuando se inicia o finaliza el flujo de trabajo. |
Registros de seguimiento de estado de actividad. | Detalles de la ejecución de la actividad. Estos registros indican el estado de una actividad de flujo de trabajo, como cuando se programa una actividad o cuando se completa o cuando se produce un error. |
Registro de reanudación de marcadores. | Se emite cada vez que se reanuda un marcador dentro de una instancia de flujo de trabajo. |
Registros de seguimiento personalizados. | Un autor de flujo de trabajo puede crear registros de seguimiento personalizados y emitirlos dentro de la actividad personalizada. |
ActivityScheduledRecord | Este registro se emite cuando una actividad programa otra actividad. |
FaultPropagationRecord | Este registro se genera cuando se propaga un error desde una actividad. |
CancelRequestedRecord | Este registro se genera cuando otra actividad cancela una actividad. |
El participante de seguimiento se suscribe un subconjunto de los registros de seguimiento emitidos utilizando perfiles de seguimiento. Un perfil de seguimiento contiene consultas de seguimiento que permiten suscribirse a un tipo de registro de seguimiento determinado. Los perfiles de seguimiento se pueden especificar en el código o en la configuración.
Para utilizar este ejemplo
Con Visual Studio, abra el archivo de solución EtwTrackingParticipantSample.sln.
Para compilar la solución, presione Ctrl+MAYÚS+B.
Para ejecutar la solución, presione F5.
De forma predeterminada, el servicio escucha en el puerto 53797 (
http://localhost:53797/SampleWorkflowService.xamlx
).Con el Explorador de archivos, abra el cliente de prueba de WCF.
El cliente de prueba de WCF (WcfTestClient.exe) se encuentra en la <carpeta> de instalación de Visual Studio\Common7\IDE\.
La carpeta de instalación predeterminada de Visual Studio es C:\Archivos de programa\Microsoft Visual Studio 10.0.
En el cliente de prueba de WCF, seleccione Agregar servicio en el menú Archivo .
Agregue la dirección del punto de conexión en el cuadro de entrada. El valor predeterminado es
http://localhost:53797/SampleWorkflowService.xamlx
.Abra la aplicación Visor de eventos.
Antes de invocar el servicio, inicie el Visor de eventos en el menú Inicio, seleccione Ejecutar y escriba .
eventvwr.exe
Asegúrese de que el registro de eventos escucha los eventos de seguimiento emitidos desde el servicio de flujo de trabajo.En la vista de árbol del Visor de eventos, vaya a Visor de eventos, Registros de aplicaciones y servicios y Microsoft. Haga clic con el botón derecho en Microsoft y seleccione Ver y, a continuación, Mostrar registros analíticos y de depuración para habilitar los registros analíticos y de depuración.
Asegúrese de que la opción Mostrar registros analíticos y de depuración esté activada.
En la vista de árbol del Visor de eventos, vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications. Haga clic con el botón derecho en Análisis y seleccione Habilitar registro para habilitar el registro analítico .
Pruebe el servicio mediante el cliente de prueba de WCF haciendo doble clic en
GetData
.Se abre el
GetData
método . La solicitud acepta un parámetro y garantiza que el valor es 0, que es el valor predeterminado.Haga clic en Invocar.
Observe los eventos emitidos desde el flujo de trabajo.
Vuelva al Visor de eventos y vaya a Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications. Haga clic con el botón derecho en Análisis y seleccione Actualizar.
Los eventos de flujo de trabajo se muestran en el visor de eventos. Observe que se muestran los eventos de ejecución de flujo de trabajo y que uno de ellos es una excepción no controlada que corresponde al error en el flujo de trabajo. También, se emite un evento de advertencia desde la actividad de flujo de trabajo, que indica que la actividad está produciendo un error.
Repita los pasos 9 y 10 con una entrada de datos distinto de 0, de modo que no se produzca ningún error.
Los perfiles de seguimiento permiten suscribirse a eventos emitidos por el tiempo de ejecución cuando cambia el estado de una instancia de flujo de trabajo. Dependiendo de sus requisitos de supervisión, puede crear un perfil muy general, que se suscribe a un conjunto pequeño de cambios de estado de alto nivel en un flujo de trabajo. Por otro lado, puede crear un perfil muy preciso cuya salida es lo suficientemente enriquecida como para reconstruir la ejecución más adelante. En el ejemplo se muestran los eventos emitidos desde el tiempo de ejecución del flujo de trabajo a ETW utilizando HealthMonitoring Tracking Profile
, que emite un conjunto pequeño de eventos. También se proporciona un perfil diferente que emite más eventos de seguimiento de flujo de trabajo en el Web.config denominado Troubleshooting Tracking Profile
. Cuando se instala .NET Framework 4.6.1, se configura un perfil predeterminado con un nombre vacío en el archivo Machine.config. La configuración del comportamiento de seguimiento de ETW usa este perfil cuando no se especifica ningún nombre de perfil o un nombre de perfil vacío.
El perfil de seguimiento de supervisión de estado emite registros de instancia de flujo de trabajo y registros de propagación de error de actividad. Este perfil se crea agregando el siguiente perfil de seguimiento a un archivo de configuración de Web.config.
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
El perfil se puede cambiar cambiando la EtwTrackingParticipant
configuración a lo siguiente.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
Para limpiar (opcional)
Abra el Visor de eventos.
Vaya al Visor de eventos, a los registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications. Haga clic con el botón derecho en Análisis y seleccione Deshabilitar registro.
Vaya al Visor de eventos, a los registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications. Haga clic con el botón derecho en Análisis y seleccione Borrar registro.
Elija la opción Borrar para borrar los eventos.
Problema conocido
Nota:
Hay un problema conocido en el Visor de eventos en el que puede no descodificar eventos ETW. Es posible que vea un mensaje de error similar al siguiente.
No se puede encontrar la descripción del ID del evento <id> del 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 se produce este error, haga clic en Actualizar en el panel de acciones. El evento ahora debe descodificar correctamente.