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.
Este tema es aplicable a Windows Workflow Foundation 4.
Un flujo de trabajo se puede ejecutar de tres maneras:
Hospedado en WorkflowServiceHost
Ejecutado como WorkflowApplication
Ejecutado directamente utilizando WorkflowInvoker
Dependiendo de la opción de hospedaje de flujo de trabajo, se puede agregar un participante de seguimiento, ya sea a través de código o de un archivo de configuración. En este tema se describe cómo configurar el seguimiento agregando un participante de seguimiento a WorkflowApplication y a WorkflowServiceHost y cómo habilitar el seguimiento al utilizar WorkflowInvoker.
Configurar seguimiento de aplicación de flujo de trabajo
Un flujo de trabajo se puede ejecutar mediante la clase WorkflowApplication. En este tema se muestra cómo configurar el seguimiento de una aplicación de flujo de trabajo de .NET Framework versión 4 al agregar un participante de seguimiento al host de flujo de trabajo WorkflowApplication. En este caso, el flujo de trabajo se ejecuta como una aplicación de flujo de trabajo. Configure una aplicación de flujo de trabajo mediante código (en lugar de utilizar un archivo de configuración), que es un archivo .exe auto-hospedado usando la clase WorkflowApplication. El participante de seguimiento se agrega como una extensión a la instancia WorkflowApplication. Esto se realiza agregando TrackingParticipant a la colección de las extensiones para la instancia de WorkflowApplication.
Para una aplicación de flujo de trabajo, puede agregar la extensión de comportamiento EtwTrackingParticipant tal y como se muestra en el siguiente código.
LogActivity activity = new LogActivity();
WorkflowApplication instance = new WorkflowApplication(activity);
EtwTrackingParticipant trackingParticipant =
new EtwTrackingParticipant
{
TrackingProfile = new TrackingProfile
{
Name = "SampleTrackingProfile",
ActivityDefinitionId = "ProcessOrder",
Queries = new WorkflowInstanceQuery
{
States = { "*" }
}
}
};
instance.Extensions.Add(trackingParticipant);
Configurar el seguimiento de servicio de flujo de trabajo
Se puede exponer un flujo de trabajo como un servicio WCF cuando se hospedó en el host de servicio WorkflowServiceHost. WorkflowServiceHost es una implementación de .NET ServiceHost especializada para un servicio basado en flujo de trabajo. En esta sección se explica cómo configurar el seguimiento para un servicio de flujo de trabajo de .NET Framework 4 que se ejecuta en WorkflowServiceHost. Se configura mediante un archivo Web.config (para un servicio hospedado en web) o un archivo App.config (para un servicio hospedado en una aplicación independiente, como una aplicación de consola) especificando un comportamiento de servicio o mediante código agregando un comportamiento específico de seguimiento a la colección Behaviors del host de servicio.
En el caso de un servicio de host hospedado en WorkflowServiceHost, puede agregar EtwTrackingParticipant mediante el elemento <behavior> en un archivo de configuración, tal y como se muestra en el siguiente ejemplo.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
<behaviors>
Por otra parte, en el caso de un servicio de flujo de trabajo hospedado en WorkflowServiceHost, puede agregar la extensión de comportamiento EtwTrackingParticipant a través del código. Para agregar un participante de seguimiento personalizado, cree una nueva extensión de comportamiento y agréguela a ServiceHost tal y como se muestra en el siguiente código de ejemplo.
![]() |
---|
Si desea ver código de ejemplo que muestre cómo crear un elemento de comportamiento personalizado que agrega un participante del seguimiento personalizado, consulte los ejemplos Seguimiento. |
ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new
Uri("https://localhost:8001/Sample"));
EtwTrackingBehavior trackingBehavior =
new EtwTrackingBehavior
{
ProfileName = "Sample Tracking Profile"
};
svcHost.Description.Behaviors.Add(trackingBehavior);
svcHost.Open();
El participante del seguimiento se agrega al host de servicio de flujo de trabajo como una extensión al comportamiento.
El siguiente código de ejemplo muestra cómo leer un perfil de seguimiento del archivo de configuración.
TrackingProfile GetProfile(string profileName, string displayName)
{
TrackingProfile trackingProfile = null;
TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
if (trackingSection == null)
{
return null;
}
if (profileName == null)
{
profileName = "";
}
//Find the profile with the specified profile name in the list of profile found in config
var match = from p in new List<TrackingProfile>(trackingSection.TrackingProfiles)
where (p.Name == profileName) && ((p.ActivityDefinitionId == displayName) || (p.ActivityDefinitionId == "*"))
select p;
if (match.Count() == 0)
{
//return an empty profile
trackingProfile = new TrackingProfile()
{
ActivityDefinitionId = displayName
};
}
else
{
trackingProfile = match.First();
}
return trackingProfile;
Este código de ejemplo muestra cómo agregar un perfil de seguimiento a un host del flujo de trabajo.
WorkflowServiceHost workflowServiceHost = serviceHostBase as WorkflowServiceHost;
if (null != workflowServiceHost)
{
string workflowDisplayName = workflowServiceHost.Activity.DisplayName;
TrackingProfile trackingProfile = GetProfile(this.profileName, workflowDisplayName);
workflowServiceHost.WorkflowExtensions.Add(() => new EtwTrackingParticipant {
TrackingProfile = trackingProfile
});
}
Configurar el seguimiento mediante WorkflowInvoker
Para configurar el seguimiento para un flujo de trabajo ejecutado utilizando WorkflowInvoker, agregue el proveedor del seguimiento como una extensión de una instancia de WorkflowInvoker. El siguiente código de muestra está tomado del ejemplo Seguimiento personalizado.
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Visualizar los registros de seguimiento en el Visor de eventos
Si se utiliza la extensión de EtwTrackingParticipant, los registros de seguimiento aparecerán en el registro analítico de los nodos Microsoft, Windows y Servidor de aplicaciones-Aplicaciones. Para ver los registros de seguimiento, siga estos pasos.
Para abrir el Visor de eventos, haga clic en Inicio y, a continuación, en Ejecutar. En el cuadro de diálogo Ejecutar, escriba eventvwr.
En el cuadro de diálogo del Visor de eventos, expanda el nodo Registros de aplicaciones y servicios.
Expanda los nodos Microsoft, Windows y Servidor de aplicaciones-Aplicaciones.
Haga clic con el botón secundario en el nodo Analítico debajo del nodo Servidor de aplicaciones-Aplicaciones y seleccione Habilitar registro.
Ejecute la aplicación habilitada para realizar seguimientos a fin de generar los registros de seguimiento.
Haga clic con el botón secundario en el nodo Analítico y seleccione Actualizar. Los registros de seguimiento deben estar visibles en el recuadro central.
La siguiente imagen muestra eventos de seguimiento en el Visor de eventos.
Registrar un identificador de proveedor específico de la aplicación
Si es necesario escribir eventos en un determinado registro de aplicación, siga estos pasos para registrar el nuevo manifiesto del proveedor.
Declare el Id. de proveedor en el archivo de configuración de la aplicación.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>
Copie el archivo de manifiesto de %windir%\Microsoft.NET\Framework\<última versión de .NET Framework 4>\Microsoft.Windows.ApplicationServer.Applications.man en una ubicación temporal y cámbiele el nombre a Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Cambie el GUID del archivo de manifiesto por el nuevo GUID.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"
Cambie el nombre de proveedor si no desea desinstalar el proveedor predeterminado.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"
Si ha cambiado el nombre de proveedor en el paso anterior, cambie los nombres de canal del archivo de manifiesto al nuevo nombre de proveedor.
<channel name="Microsoft-Windows-Application Server-Applications_Provider1/Admin" chid="ADMIN_CHANNEL" symbol="ADMIN_CHANNEL" type="Admin" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ADMIN_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Operational" chid="OPERATIONAL_CHANNEL" symbol="OPERATIONAL_CHANNEL" type="Operational" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.OPERATIONAL_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Analytic" chid="ANALYTIC_CHANNEL" symbol="ANALYTIC_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.ANALYTIC_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Debug" chid="DEBUG_CHANNEL" symbol="DEBUG_CHANNEL" type="Debug" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.DEBUG_CHANNEL.message)" /> <channel name="Microsoft-Windows-Application Server-Applications_Provider1/Perf" chid="PERF_CHANNEL" symbol="PERF_CHANNEL" type="Analytic" enabled="false" isolation="Application" message="$(string.MICROSOFT_WINDOWS_APPLICATIONSERVER_APPLICATIONS.channel.PERF_CHANNEL.message)" />
Genere el archivo DLL de recursos siguiendo estos pasos.
Instale el SDK de Windows. El SDK de Windows incluye el compilador de mensajes () y el compilador de recursos ().
En un símbolo del sistema de Windows SDK, ejecute mc.exe en el archivo de manifiesto nuevo.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Ejecute rc.exe en el archivo de recursos generado en el paso anterior.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
Cree un archivo cs vacío denominado NewProviderReg.cs.
Cree un archivo DLL de recursos mediante el compilador de C#.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
Cambie el nombre del archivo DLL de mensajes y de recursos en el archivo de manifiesto de
Microsoft.Windows.ApplicationServer.Applications.Provider1.man
por el nuevo nombre de archivo DLL.<provider name="Microsoft-Windows-Application Server-Applications_Provider1" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" symbol="Microsoft_Windows_ApplicationServer_ApplicationEvents" resourceFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll" messageFileName="<dll directory>\Microsoft.Windows.ApplicationServer.Applications_Provider1.dll">
Utilice para registrar el manifiesto.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man