Partager via


Configuration du suivi d'un workflow

Cette rubrique s'applique à Windows Workflow Foundation 4.

Un workflow peut s'exécuter de trois façons :

En fonction de l'option d'hébergement du workflow, un participant de suivi peut être ajouté soit via du code, soit via un fichier de configuration. Cette rubrique explique comment le suivi est configuré en ajoutant un participant de suivi à un WorkflowApplication et à un WorkflowServiceHost, et comment activer le suivi lorsque vous utilisez WorkflowInvoker.

Configuration du suivi d'application de workflow

Un workflow peut s'exécuter à l'aide de la classe WorkflowApplication. Cette rubrique montre comment le suivi est configuré pour une application de workflow .NET Framework version 4 en ajoutant un participant de suivi à l'hôte du workflow WorkflowApplication. Dans ce cas, le workflow s'exécute comme une application de workflow. Vous configurez une application de workflow 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 classe WorkflowApplication. Le participant de suivi est ajouté sous forme d'extension à l'instance WorkflowApplication. Cela est fait en ajoutant le TrackingParticipant à la collection d'extensions pour l'instance WorkflowApplication.

Pour une application de workflow, vous pouvez ajouter l'extension de comportement EtwTrackingParticipant 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 de service de workflow

Un workflow peut être exposé comme un service WCF en cas d'hébergement dans l'hôte de service WorkflowServiceHost. WorkflowServiceHost est une implémentation .NET ServiceHost spécialisée pour un service basé sur un workflow. Cette section explique comment configurer le suivi pour un service de workflow .NET Framework 4 s'exécutant dans 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, telle qu'une application console) en spécifiant un comportement de service ou via du code en ajoutant, à la collection Behaviors, un comportement spécifique au suivi pour l'hôte de service.

Pour un service de workflow hébergé dans WorkflowServiceHost, vous pouvez ajouter EtwTrackingParticipant à l'aide de l'élément <behavior> dans un fichier de configuration, comme indiqué dans l'exemple suivant.

<behaviors>
   <serviceBehaviors>
        <behavior>
          <etwTracking profileName="Sample Tracking Profile" />
        </behavior>            
   </serviceBehaviors>
<behaviors>

Pour un service de workflow hébergé dans WorkflowServiceHost, vous pouvez également ajouter l'extension de comportement EtwTrackingParticipant dans le code. Pour ajouter un participant au suivi personnalisé, créez une extension de comportement et ajoutez-le au ServiceHost comme indiqué dans l'exemple de code suivant.

Ee517415.note(fr-fr,VS.100).gifRemarque :
Si vous souhaitez consulter l'exemple de code qui indique comment créer un élément de comportement personnalisé qui ajoute un participant au suivi personnalisé, reportez-vous aux exemples Suivi.

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();

Le participant au suivi est ajouté à l'hôte du service de workflow comme une extension au comportement.

Cet exemple de code suivant indique comment lire un modèle de suivi de 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;
            }

            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;

Cet exemple de code indique comment ajouter un modèle de suivi à un hôte de workflow.

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
                        });
 }

Configuration du suivi à l'aide de WorkflowInvoker

Pour configurer le suivi pour un workflow exécuté à l'aide de WorkflowInvoker, ajoutez le fournisseur de suivi en tant qu'extension à une instance WorkflowInvoker. L'exemple de code suivant est extrait de l'exemple Suivi personnalisé.

WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
invoker.Invoke();

Affichage des enregistrements de suivi dans l'observateur d'événements

Si l'extension EtwTrackingParticipant est utilisée, les enregistrements de suivi s'afficheront dans le journal Analyse des nœuds Microsoft, Windows et Serveur d'applications-Applications. Pour afficher des enregistrements de suivi, procédez comme suit :

  1. 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.

  2. Dans la boîte de dialogue Observateur d'événements, développez le nœud Journaux des applications et des services.

  3. Développez les nœuds Microsoft, Windows et Serveur d'applications-Applications.

  4. Cliquez avec le bouton droit sur le nœud Analyse sous le nœud Serveur d'applications-Applications, puis sélectionnez Activer le journal.

  5. Exécutez votre application avec le suivi activé pour générer des enregistrements de suivi.

  6. Cliquez avec le bouton droit sur le nœud Analyse et sélectionnez Actualiser. Les enregistrements de suivi doivent être visibles dans le volet central.

L'image suivante montre des événements de suivi dans l'observateur d'événements.

Observateur d'événements affichant des enregistrements de suivi

Enregistrement d'un ID de fournisseur spécifique à l'application

Si des événements doivent être écrits dans un journal d'applications spécifique, procédez comme suit pour enregistrer le nouveau manifeste du fournisseur.

  1. Déclarez l'ID de fournisseur dans le fichier de configuration de l'application.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Copiez le fichier manifeste de %windir%\Microsoft.NET\Framework\<version la plus récente de .NET Framework 4>\Microsoft.Windows.ApplicationServer.Applications.man vers un emplacement temporaire, puis renommez-le Microsoft.Windows.ApplicationServer.Applications_Provider1.man

  3. Remplacez le GUID dans le fichier manifeste par le nouveau GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"
    
  4. Modifiez le nom du fournisseur si vous ne voulez pas désinstaller le fournisseur par défaut.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}"
    
  5. Si vous avez modifié le nom du fournisseur à l'étape précédente, remplacez les noms des canaux dans le fichier manifeste par le nouveau nom de 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)" />
    
  6. Générez la DLL de ressource en procédant comme suit.

    1. 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).

    2. 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.man 
      
    3. Exécutez rc.exe sur le fichier de ressources généré à l'étape précédente.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Créez un fichier .cs vide appelé NewProviderReg.cs.

    5. 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.dll
      
    6. Remplacez le nom de la DLL de ressource et de message dans le fichier manifeste de Microsoft.Windows.ApplicationServer.Applications.Provider1.man par 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">
      
    7. Utilisez wevtutil pour enregistrer le manifeste.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man