Compartir a través de


Seguimiento de participantes

Los participantes de seguimiento son puntos de extensibilidad que permiten a un desarrollador de flujo de trabajo tener acceso a objetos TrackingRecord y procesarlos. .NET Framework 4.6.1 incluye un participante de seguimiento estándar que escribe registros de seguimiento como eventos de Event Tracing for Windows (ETW). Si eso no cumple sus requisitos, también puede escribir un participante de seguimiento personalizado.

Seguimiento de participantes

La infraestructura de seguimiento permite la aplicación de un filtro en los registros de seguimiento salientes para que un participante pueda suscribirse a un subconjunto de los registros. El mecanismo para aplicar un filtro es a través de un perfil de seguimiento.

Windows Workflow Foundation (WF) en .NET Framework 4.6.1 proporciona un participante de seguimiento que escribe los registros de seguimiento en una sesión de ETW. El participante se configura en un servicio de flujo de trabajo agregando un comportamiento específico del seguimiento en un archivo de configuración. Habilitar un participante de seguimiento ETW permite ver los registros de seguimiento en el visor de eventos. El ejemplo de SDK para el seguimiento basado en ETW es una buena manera de familiarizarse con el seguimiento de WF mediante el participante de seguimiento basado en ETW.

Participante de seguimiento de ETW

.NET Framework 4.6.1 incluye un participante de seguimiento de ETW que escribe los registros de seguimiento en una sesión de ETW. Esto se hace de forma muy eficaz con un impacto mínimo en el rendimiento de la aplicación o en el rendimiento del servidor. Una ventaja de usar el participante de seguimiento ETW estándar es que los registros de seguimiento que recibe se pueden ver con la otra aplicación y los registros del sistema en el Visor de eventos de Windows.

El participante de seguimiento ETW estándar se configura en el archivo Web.config tal como se muestra en el ejemplo siguiente.

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
   <tracking>
      <profiles>
        <trackingProfile name="Sample Tracking Profile">
        ….
       </trackingProfile>
      </profiles>
    </tracking>
  </system.serviceModel>
</configuration>

Nota:

Si no se especifica un trackingProfile nombre, como simplemente <etwTracking/> o <etwTracking profileName=""/>, se usa el perfil de seguimiento predeterminado instalado con .NET Framework 4.6.1 en el archivo Machine.config.

En el archivo Machine.config, el perfil de seguimiento predeterminado se suscribe a los registros y errores de instancias de flujo de trabajo.

En ETW, los eventos se escriben en la sesión ETW a través de un identificador de proveedor. El id. de proveedor que el participante de seguimiento de ETW usa para escribir los registros de seguimiento en ETW se define en la sección de diagnóstico del archivo Web.config (debajo de <system.serviceModel><diagnostics>). De forma predeterminada, el participante de seguimiento de ETW usa un identificador de proveedor predeterminado cuando no se ha especificado uno, como se muestra en el ejemplo siguiente.

<system.serviceModel>
        <diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />

La siguiente ilustración muestra el flujo de los datos de seguimiento a través del participante de seguimiento de ETW. Una vez que los datos de seguimiento llegan a la sesión ETW, se puede acceder a ellos de varias maneras. Una de las formas más útiles de acceder a estos eventos es a través del Visor de eventos, una herramienta común de Windows que se usa para ver registros y seguimientos de aplicaciones y servicios.

Flujo de datos de seguimiento mediante el proveedor de seguimiento de ETW.

Datos de eventos del participante de seguimiento

Un participante del seguimiento serializa los datos de eventos a los que se ha realizado el seguimiento en una sesión de ETW con el formato de un evento por registro de seguimiento. Un evento se identifica mediante un identificador dentro del intervalo de 100 a 199. Para obtener definiciones de los registros de eventos de seguimiento emitidos por un participante de seguimiento, consulte el tema Referencia de eventos de seguimiento .

El tamaño de un evento ETW está limitado por el tamaño del búfer ETW o por la carga máxima de un evento ETW, el valor que sea menor. Si el tamaño del evento supera cualquiera de estos límites ETW, el evento se trunca y su contenido se quita de forma arbitraria. Las variables, argumentos, anotaciones y datos personalizados no se quitan selectivamente. En caso de truncamiento, se truncan todos ellos independientemente del valor que provocó que el tamaño del evento superara el límite de ETW. Los datos quitados se reemplazan por <item>..<item>.

Los tipos complejos de variables, argumentos y elementos de datos personalizados se serializan en el registro de eventos ETW mediante la NetDataContractSerializer clase . Esta clase incluye información de tipo CLR en el flujo XML serializado.

El truncamiento de los datos de carga a causa de los límites de ETW puede dar lugar a que se envíen registros de monitorización duplicados a una sesión de ETW. Esto puede ocurrir si hay más de una sesión escuchando los eventos y las sesiones tienen límites de carga diferentes para los eventos.

Para la sesión con el límite inferior, se puede truncar el evento. El participante de seguimiento de ETW no tiene conocimiento del número de sesiones que están escuchando los eventos. Si un evento se trunca para una sesión, el participante de ETW reintenta el envío del evento una vez. En este caso la sesión que se configura para aceptar un tamaño de carga mayor obtendrá el evento dos veces (el evento no truncado y el truncado). Se puede evitar la duplicación configurando todas las sesiones ETW con los mismos límites de tamaño de búfer.

Acceso a datos de seguimiento desde un participante ETW en el Visor de eventos

Se puede acceder a los eventos escritos en una sesión ETW por el participante de seguimiento de ETW a través del Visor de eventos (cuando se usa el identificador de proveedor predeterminado). Esto permite ver rápidamente los registros de seguimiento emitidos por el flujo de trabajo.

Nota:

Los eventos del registro de seguimiento emitidos en una sesión de ETW, usan id. de eventos en un intervalo de 100 a 199.

Para habilitar la visualización de los registros de seguimiento en el Visor de eventos

  1. Iniciar el Visor de eventos (EVENTVWR.EXE)

  2. Seleccione Visor de eventos, Registros de aplicaciones y servicios, Microsoft, Windows, Application Server-Applications.

  3. Haga clic con el botón derecho y asegúrese de que la opción Ver, Mostrar registros analíticos y de depuración está seleccionada. Si no es así, selecciónelo para que la marca de verificación aparezca junto a ella. Esto muestra los registros analíticos, de rendimiento y de depuración .

  4. Haga clic con el botón derecho en el registro analítico y seleccione Habilitar registro. El registro existirá en el %SystemRoot%archivo \System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl.

Participante de seguimiento personalizado

La API de participante de seguimiento permite extender el runtime de seguimiento con un participante de seguimiento proporcionado por el usuario, el cual puede incluir lógica personalizada para manejar los registros de seguimiento emitidos por el runtime del flujo de trabajo. Para escribir un participante de seguimiento personalizado, el desarrollador debe implementar el Track método en la TrackingParticipant clase . Se llama a este método cuando el entorno de ejecución del flujo de trabajo emite un registro de seguimiento.

Los participantes de seguimiento se derivan de la clase TrackingParticipant. La clase EtwTrackingParticipant proporcionada por el sistema emite un evento ETW (Seguimiento de eventos para Windows) para cada registro de seguimiento que se haya recibido. Para crear un participante de seguimiento personalizado, se crea una clase que deriva de TrackingParticipant. Para proporcionar la funcionalidad de seguimiento básica, anule Track. Track se llama cuando el tiempo de ejecución envía un registro de seguimiento y se puede procesar de la manera deseada. En el ejemplo siguiente, se define una clase participante de seguimiento personalizada que emite todos los registros de seguimiento a la ventana de la consola. También puede implementar un objeto TrackingParticipant que procese los registros de seguimiento de forma asincrónica mediante sus métodos BeginTrack y EndTrack.

class ConsoleTrackingParticipant : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        if (record != null)
        {
            Console.WriteLine("=================================");
            Console.WriteLine(record);
        }
    }
}

Para usar un participante de seguimiento determinado, regístrelo con la instancia de flujo de trabajo de la que desea realizar el seguimiento, como se muestra en el ejemplo siguiente.

myInstance.Extensions.Add(new ConsoleTrackingParticipant());

En el ejemplo siguiente, se crea un flujo de trabajo que consta de una Sequence actividad que contiene una WriteLine actividad. Se añade ConsoleTrackingParticipant a las extensiones y se invoca el flujo de trabajo.

Activity activity= new Sequence()
{
    Activities =
    {
        new WriteLine()
        {
            Text = "Hello World."
        }
    }
};

WorkflowApplication instance = new WorkflowApplication(activity);

instance.Extensions.Add(new ConsoleTrackingParticipant());
  instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
            {
                Console.WriteLine("workflow instance completed, Id = " + instance.Id);
                resetEvent.Set();
            };
            instance.Run();
            Console.ReadLine();

Consulte también