Freigeben über


Konfigurieren der Nachverfolgung für einen Workflow

Ein Workflow kann auf drei Arten ausgeführt werden:

Abhängig von der Workflowhostingoption kann ein Tracking-Teilnehmer entweder über Code oder über eine Konfigurationsdatei hinzugefügt werden. In diesem Thema wird beschrieben, wie die Nachverfolgung durch Hinzufügen eines Nachverfolgungsteilnehmers zu einem WorkflowApplication und zu einem WorkflowServiceHostsowie zum Aktivieren der Nachverfolgung bei Verwendung WorkflowInvokerkonfiguriert wird.

Konfigurieren der Workflowanwendungsnachverfolgung

Ein Workflow kann mit der WorkflowApplication Klasse ausgeführt werden. In diesem Thema wird veranschaulicht, wie die Nachverfolgung für eine .NET Framework 4.6.1-Workflowanwendung konfiguriert wird, indem sie dem WorkflowApplication Workflowhost einen Nachverfolgungsteilnehmer hinzufügen. In diesem Fall wird der Workflow als Workflowanwendung ausgeführt. Sie konfigurieren eine Workflowanwendung über Code (statt mithilfe einer Konfigurationsdatei), bei der es sich um eine selbst gehostete .exe Datei handelt, die die WorkflowApplication Klasse verwendet. Der Tracking-Teilnehmer wird als Erweiterung der WorkflowApplication Instanz hinzugefügt. Dazu fügen Sie TrackingParticipant zur Erweiterungsauflistung für die WorkflowApplication-Instanz hinzu.

Für eine Workflowanwendung können Sie die EtwTrackingParticipant Verhaltenserweiterung hinzufügen, wie im folgenden Code gezeigt.

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

Konfigurieren der Workflowdienstnachverfolgung

Ein Workflow kann als WCF-Dienst verfügbar gemacht werden, wenn er WorkflowServiceHost im Diensthost gehostet wird. WorkflowServiceHost ist eine spezielle .NET ServiceHost-Implementierung für einen workflowbasierten Dienst. In diesem Abschnitt wird erläutert, wie Sie die Nachverfolgung für einen .NET Framework 4.6.1-Workflowdienst konfigurieren, der in WorkflowServiceHostausgeführt wird. Sie wird über eine Web.config-Datei (für einen webgehosteten Dienst) oder eine App.config-Datei (für einen Dienst, der in einer eigenständigen Anwendung gehostet wird, z. B. eine Konsolenanwendung), konfiguriert, indem ein Dienstverhalten oder code angegeben wird, indem der Behaviors Sammlung für den Diensthost ein nachverfolgungsspezifisches Verhalten hinzugefügt wird.

Für einen Workflow-Dienst, der in WorkflowServiceHost gehostet wird, können Sie das EtwTrackingParticipant Element mithilfe des <behavior> in einer Konfigurationsdatei hinzufügen, wie im folgenden Beispiel gezeigt wird.

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

Alternativ können Sie für einen Workflowdienst, der in WorkflowServiceHost gehostet wird, die EtwTrackingParticipant-Verhaltenserweiterung über Code hinzufügen. Um einen benutzerdefinierten Nachverfolgungsteilnehmer hinzuzufügen, erstellen Sie eine neue Verhaltensweiterung und fügen Sie sie dem ServiceHost hinzu, wie im folgenden Beispielcode gezeigt.

Hinweis

Wenn Sie Beispielcode sehen möchten, der zeigt, wie Sie ein benutzerdefiniertes Verhaltenselement erstellen, das einen benutzerdefinierten Tracking-Teilnehmer hinzufügt, sehen Sie sich die Tracking-Beispiele an.

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

Der Überwachungsteilnehmer wird dem Workflow-Diensthost als Erweiterung zum Verhalten hinzugefügt.

Dieser Beispielcode unten zeigt, wie Sie ein Nachverfolgungsprofil aus der Konfigurationsdatei lesen.

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;

Dieser Beispielcode zeigt, wie Sie einem Workflowhost ein Nachverfolgungsprofil hinzufügen.

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

Hinweis

Weitere Informationen zu Tracking-Profilen finden Sie unter Tracking Profiles.

Konfigurieren der Nachverfolgung mithilfe von WorkflowInvoker

Um die Nachverfolgung für einen über WorkflowInvoker ausgeführten Workflow zu konfigurieren, fügen Sie den Tracking-Anbieter als Erweiterung zu einer WorkflowInvoker Instanz hinzu. Das folgende Codebeispiel stammt aus dem Beispiel für die benutzerdefinierte Nachverfolgung .

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

Anzeigen von Verfolgungsdatensätzen in der Ereignisanzeige

Es gibt zwei Ereignisanzeigeprotokolle von besonderem Interesse, die beim Nachverfolgen der WF-Ausführung angezeigt werden sollen – das Analyseprotokoll und das Debugprotokoll. Beide befinden sich unter Microsoft|Windows|Application Server-Applications Node. Protokolle in diesem Abschnitt enthalten Ereignisse aus einer einzelnen Anwendung und nicht Ereignisse, die auswirkungen auf das gesamte System haben.

Debug-Trace-Ereignisse werden in das Debug-Log geschrieben. Um WF-Debugablaufverfolgungsereignisse in der Ereignisanzeige zu sammeln, aktivieren Sie das Debugprotokoll.

  1. Um die Ereignisanzeige zu öffnen, klicken Sie auf "Start" und dann auf "Ausführen". Geben Sie im Dialogfeld "Ausführen" den Befehl eventvwrein.

  2. Erweitern Sie im Dialogfeld "Ereignisanzeige" den Knoten "Anwendungen und Dienstprotokolle" .

  3. Erweitern Sie die Knoten "Microsoft", "Windows" und "Application Server-Applications".

  4. Klicken Sie mit der rechten Maustaste auf den Debugknoten unter dem Knoten "Application Server-Applications ", und wählen Sie "Protokoll aktivieren" aus.

  5. Führen Sie Ihre tracing-fähige Anwendung aus, um Tracing-Ereignisse zu generieren.

  6. Klicken Sie mit der rechten Maustaste auf den Debugknoten , und wählen Sie "Aktualisieren" aus. Ablaufverfolgungsereignisse sollten im mittleren Bereich angezeigt werden.

WF4 stellt einen Nachverfolgungsteilnehmer bereit, der Nachverfolgungsdatensätze in eine ETW (Ereignisablaufverfolgung für Windows)-Sitzung schreibt. Der ETW-Überwachungsteilnehmer ist mit einem Überwachungsprofil konfiguriert, um Überwachungsdatensätze zu abonnieren. Wenn die Nachverfolgung aktiviert ist, werden Fehlerverfolgungsdatensätze an ETW ausgegeben. ETW-Tracking-Ereignisse (zwischen dem Bereich von 100-113), die den vom ETW-Tracking-Teilnehmer ausgegebenen Trackingereignissen entsprechen, werden in das Analyseprotokoll geschrieben.

Führen Sie zum Anzeigen von Nachverfolgungsdatensätzen die folgenden Schritte aus.

  1. Um die Ereignisanzeige zu öffnen, klicken Sie auf "Start" und dann auf "Ausführen". Geben Sie im Dialogfeld "Ausführen" den Befehl eventvwrein.

  2. Erweitern Sie im Dialogfeld "Ereignisanzeige" den Knoten "Anwendungen und Dienstprotokolle" .

  3. Erweitern Sie die Knoten "Microsoft", "Windows" und "Application Server-Applications".

  4. Klicken Sie mit der rechten Maustaste auf den Analyseknoten unter dem Knoten "Application Server-Applications ", und wählen Sie "Protokoll aktivieren" aus.

  5. Führen Sie Ihre nachverfolgungsfähige Anwendung aus, um Tracking-Datensätze zu generieren.

  6. Klicken Sie mit der rechten Maustaste auf den Analyseknoten, und wählen Sie "Aktualisieren". Nachverfolgungsdatensätze sollten im mittleren Bereich sichtbar sein.

Die folgende Abbildung zeigt das Nachverfolgen von Ereignissen in der Ereignisanzeige:

Screenshot der Ereignisanzeige mit Tracking-Datensätzen.

Registrieren einer anwendungsspezifischen Anbieter-ID

Wenn Ereignisse in ein bestimmtes Anwendungsprotokoll geschrieben werden müssen, führen Sie die folgenden Schritte aus, um das neue Anbietermanifest zu registrieren.

  1. Deklarieren Sie die Anbieter-ID in der Anwendungskonfigurationsdatei.

    <system.serviceModel>
        <diagnostics etwProviderId="2720e974-9fe9-477a-bb60-81fe3bf91eec"/>
    </system.serviceModel>
    
  2. Kopieren Sie die Manifestdatei aus %windir%\Microsoft.NET\Framework\<neueste Version von .NET Framework 4.6.1>\Microsoft.Windows.ApplicationServer.Applications.man an einen temporären Speicherort, und benennen Sie sie in Microsoft.Windows.ApplicationServer.Applications_Provider1.man um.

  3. Ändern Sie die GUID in der Manifestdatei in die neue GUID.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  4. Ändern Sie den Anbieternamen, wenn Sie den Standardanbieter nicht deinstallieren möchten.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Wenn Sie den Anbieternamen im vorherigen Schritt geändert haben, ändern Sie die Kanalnamen in der Manifestdatei in den neuen Anbieternamen.

    <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. Generieren Sie die Ressourcen-DLL, indem Sie die folgenden Schritte ausführen.

    1. Installieren Sie das Windows SDK. Das Windows SDK enthält den Nachrichtencompiler (mc.exe) und den Ressourcencompiler (rc.exe).

    2. Öffnen Sie eine Windows SDK-Befehlszeile und führen Sie mc.exe auf der neuen Manifestdatei aus.

      mc.exe Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      
    3. Führen Sie rc.exe für die im vorherigen Schritt generierte Ressourcendatei aus.

      rc.exe  Microsoft.Windows.ApplicationServer.Applications_Provider1.rc
      
    4. Erstellen Sie eine leere CS-Datei namens NewProviderReg.cs.

    5. Erstellen Sie eine Ressourcen-DLL mit dem C#-Compiler.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Ändern Sie den Namen der Ressourcen- und Nachrichten-DLL in der Manifestdatei von Microsoft.Windows.ApplicationServer.Applications.Provider1.man zu dem neuen DLL-Namen.

      <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. Verwenden Sie wevtutil , um das Manifest zu registrieren.

      wevtutil im Microsoft.Windows.ApplicationServer.Applications_Provider1.man
      

Siehe auch