Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un flux de travail peut s’exécuter de trois façons :
Hébergé dans WorkflowServiceHost
Exécuté en tant que WorkflowApplication
Exécuté directement à l’aide de WorkflowInvoker
Selon l’option d’hébergement de flux de travail, un participant de suivi peut être ajouté via du code ou via un fichier de configuration. Cette rubrique décrit comment le suivi est configuré en ajoutant un participant de suivi à un WorkflowApplication et à un WorkflowServiceHost, et comment activer le suivi lors de l’utilisation WorkflowInvoker.
Configuration du suivi des applications de flux de travail
Un flux de travail peut s’exécuter à l’aide de la WorkflowApplication classe. Cette rubrique montre comment le suivi est configuré pour une application de flux de travail .NET Framework 4.6.1 en ajoutant un participant de suivi à l’hôte de WorkflowApplication flux de travail. Dans ce cas, le flux de travail s’exécute en tant qu’application de flux de travail. Vous configurez une application de flux de travail via du code (plutôt qu’à l’aide d’un fichier de configuration), qui est un fichier .exe auto-hébergé à l’aide de la WorkflowApplication classe. Le participant de suivi est ajouté en tant qu’extension à l’instance WorkflowApplication . Pour ce faire, ajoutez le TrackingParticipant à la collection d’extensions pour l’instance de WorkflowApplication.
Pour une application de flux de travail, vous pouvez ajouter l’extension EtwTrackingParticipant de comportement comme indiqué dans le code suivant.
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);
Configuration du suivi des services de flux de travail
Un flux de travail peut être exposé en tant que service WCF lorsqu’il est hébergé dans l’hôte de WorkflowServiceHost service. WorkflowServiceHost est une implémentation .NET ServiceHost spécialisée pour un service basé sur un flux de travail. Cette section explique comment configurer le suivi pour un service de flux de travail .NET Framework 4.6.1 en cours d’exécution WorkflowServiceHost. Il est configuré via un fichier Web.config (pour un service hébergé sur le web) ou un fichier App.config (pour un service hébergé dans une application autonome, par exemple une application console) en spécifiant un comportement de service ou par le biais du code en ajoutant un comportement spécifique au suivi à la collection pour l’hôte Behaviors de service.
Pour un service de flux de travail hébergé dans WorkflowServiceHost, vous pouvez ajouter le EtwTrackingParticipant à l'aide de l’élément <behavior> dans un fichier de configuration, comme illustré dans l’exemple suivant.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
Sinon, pour un service de flux de travail hébergé dans WorkflowServiceHost, vous pouvez ajouter l’extension de comportement via du EtwTrackingParticipant code. Pour ajouter un participant de suivi personnalisé, créez une extension de comportement et ajoutez-la à l’exemple ServiceHost de code suivant.
Remarque
Si vous souhaitez afficher un exemple de code qui montre comment créer un élément de comportement personnalisé qui ajoute un participant de suivi personnalisé, reportez-vous aux exemples de suivi .
ServiceHost svcHost = new ServiceHost(typeof(WorkflowService), new
Uri("http://localhost:8001/Sample"));
EtwTrackingBehavior trackingBehavior =
new EtwTrackingBehavior
{
ProfileName = "Sample Tracking Profile"
};
svcHost.Description.Behaviors.Add(trackingBehavior);
svcHost.Open();
Le participant de suivi est ajouté à l’hôte du service de workflow en tant qu'extension du comportement.
Cet exemple de code ci-dessous montre comment lire un profil de suivi à partir du fichier de configuration.
TrackingProfile GetProfile(string profileName, string displayName)
{
TrackingProfile trackingProfile = null;
TrackingSection trackingSection = (TrackingSection)WebConfigurationManager.GetSection("system.serviceModel/tracking");
if (trackingSection == null)
{
return 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;
Cet exemple de code montre comment ajouter un profil de suivi à un hôte de flux de travail.
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
});
}
Remarque
Pour plus d’informations sur le suivi des profils, reportez-vous aux profils de suivi.
Configuration du suivi à l’aide de WorkflowInvoker
Pour configurer le suivi d’un flux de travail exécuté à l’aide WorkflowInvokerde , ajoutez le fournisseur de suivi en tant qu’extension à une WorkflowInvoker instance. L’exemple de code suivant provient de l’exemple Custom Tracking .
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();
Affichage des enregistrements de suivi dans l’Observateur d’événements
Il existe deux journaux de l'Observateur d'événements qui sont particulièrement intéressants à consulter lors du suivi de l'exécution de WF : le journal Analytique et le journal de Débogage. Les deux se trouvent sous le nœud Server-Applications de l'application Microsoft|Windows. Les journaux de cette section contiennent des événements d’une application unique plutôt que des événements qui ont un impact sur l’ensemble du système.
Les événements de trace de débogage sont écrits dans le journal de débogage. Pour collecter les événements de trace de débogage WF dans l'Observateur d'événements, activez le journal de débogage.
Pour ouvrir l’Observateur d’événements, cliquez sur Démarrer, puis sur Exécuter. Dans la boîte de dialogue Exécuter, tapez
eventvwr.Dans la boîte de dialogue Observateur d’événements, développez le nœud Journaux des applications et services .
Développez les nœuds Microsoft, Windows et Application Server-Applications .
Cliquez avec le bouton droit sur le nœud Débogage sous le nœud Serveur d’applications-Applications, puis sélectionnez Activer le journal.
Exécutez votre application prenant en charge le suivi pour générer des événements de suivi.
Cliquez avec le bouton droit sur le nœud Debug et sélectionnez Actualiser. Les événements de suivi doivent être visibles dans le volet central.
WF 4 fournit un participant de suivi qui écrit des enregistrements de suivi dans une session ETW (Suivi d’événements pour Windows). Le participant de suivi ETW est configuré avec un modèle de suivi pour s'abonner aux enregistrements de suivi. Lorsque le suivi est activé, les enregistrements de suivi des erreurs sont émis vers ETW. Les événements de suivi ETW (entre la plage de 100 à 113) correspondant aux événements de suivi émis par le participant de suivi ETW sont écrits dans le journal analytique.
Pour afficher les enregistrements de suivi, procédez comme suit.
Pour ouvrir l’Observateur d’événements, cliquez sur Démarrer, puis sur Exécuter. Dans la boîte de dialogue Exécuter, tapez
eventvwr.Dans la boîte de dialogue Observateur d’événements, développez le nœud Journaux des applications et services .
Développez les nœuds Microsoft, Windows et Application Server-Applications .
Cliquez avec le bouton droit sur le nœud Analytique sous le nœud Application Server-Applications , puis sélectionnez Activer le journal.
Exécutez votre application avec suivi pour générer des enregistrements de suivi.
Cliquez avec le bouton droit sur le nœud Analytique , puis sélectionnez Actualiser. Les enregistrements de suivi doivent être visibles dans le volet central.
L’image suivante montre les événements de suivi dans l’observateur d’événements :
![]()
Inscription d’un ID de fournisseur spécifique à l’application
Si des événements doivent être écrits dans un journal d’application spécifique, procédez comme suit pour inscrire le nouveau manifeste du fournisseur.
Déclarez l’ID du fournisseur dans le fichier de configuration de l’application.
<system.serviceModel> <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/> </system.serviceModel>Copiez le fichier manifeste à partir de %windir%\Microsoft.NET\Framework\<latest version de .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man vers un emplacement temporaire, puis renommez-le en Microsoft.Windows.ApplicationServer.Applications_Provider1.man
Remplacez le GUID dans le fichier manifeste par le nouveau GUID.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />Modifiez le nom du fournisseur si vous ne souhaitez pas désinstaller le fournisseur par défaut.
<provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />Si vous avez modifié le nom du fournisseur à l’étape précédente, remplacez les noms de canal dans le fichier manifeste par le nouveau nom du fournisseur.
<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)" />Générez la DLL de ressource en suivant ces étapes.
Installez le Kit de développement logiciel (SDK) Windows. Le Kit de développement logiciel (SDK) Windows inclut le compilateur de messages (mc.exe) et le compilateur de ressources (rc.exe).
Dans une invite de commandes du Kit de développement logiciel (SDK) Windows, exécutez mc.exe sur le nouveau fichier manifeste.
mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.manExécutez rc.exe sur le fichier de ressources généré à l’étape précédente.
rc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.rcCréez un fichier cs vide appelé NewProviderReg.cs.
Créez une DLL de ressource à l’aide du compilateur C#.
csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dllRemplacez le nom de la DLL de ressource et de message dans le fichier manifeste de
Microsoft.Windows.ApplicationServer.Applications.Provider1.manpar le nouveau nom de 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" />Utilisez wevtutil pour inscrire le manifeste.
wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man