Freigeben über


Konfigurieren der Nachverfolgung für einen Workflow

Es gibt drei Möglichkeiten zum Ausführen eines Workflows:

Abhängig von der Workflow-Hostingoption kann ein Nachverfolgungsteilnehmer entweder über Code oder eine Konfigurationsdatei hinzugefügt werden. In diesem Thema wird beschrieben, wie die Nachverfolgung konfiguriert wird, indem einer WorkflowApplication und einem WorkflowServiceHost ein Nachverfolgungsteilnehmer hinzugefügt wird, und wie die Nachverfolgung bei der Verwendung von WorkflowInvoker aktiviert wird.

Konfigurieren der Nachverfolgung von Workflowanwendungen

Ein Workflow kann mit der WorkflowApplication-Klasse ausgeführt werden. Dieses Thema veranschaulicht, wie die Nachverfolgung für eine .NET Framework 4.6.1-Workflowanwendung konfiguriert wird, indem dem WorkflowApplication-Workflowhost eine Nachverfolgungskomponente hinzugefügt wird. In diesem Fall wird der Workflow als Workflowanwendung ausgeführt. Sie konfigurieren eine Workflowanwendung über Code (statt eine Konfigurationsdatei zu verwenden), der aus einer selbst gehosteten EXE-Datei unter Verwendung der WorkflowApplication-Klasse besteht. Der Nachverfolgungsteilnehmer wird der WorkflowApplication-Instanz als Erweiterung hinzugefügt. Dies geschieht, indem der Erweiterungsauflistung für die WorkflowApplication-Instanz der TrackingParticipant hinzugefügt wird.

Sie können einer Workflowanwendung die Erweiterung zum EtwTrackingParticipant-Verhalten hinzufügen. Dies wird im folgenden Code demonstriert.

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 Überwachung von Workflowdiensten

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

Bei einem Workflowdienst, der in WorkflowServiceHost gehostet wird, können Sie EtwTrackingParticipant mithilfe des Elements <behavior> in einer Konfigurationsdatei hinzufügen. Dies wird im folgenden Beispiel demonstriert.

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

Alternativ können Sie einem Workflowdienst, der im WorkflowServiceHost gehostet wird, die Erweiterung für das EtwTrackingParticipant-Verhalten über Code hinzufügen. Um einen benutzerdefinierten Überwachungsteilnehmer hinzuzufügen, erstellen Sie eine neue Verhaltenserweiterung, und fügen Sie diese dem ServiceHost hinzu, wie im folgenden Beispielcode gezeigt.

Hinweis

Beispielcode, der zeigt, wie ein benutzerdefiniertes -Element erstellt wird, mit dem eine benutzerdefinierte Nachverfolgungskomponente hinzugefügt wird, finden Sie unter Nachverfolgung.

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.

Aus dem unten angezeigten Beispielcode können Sie ersehen, wie ein Überwachungsprofil aus der Konfigurationsdatei gelesen wird.

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;

In diesem Beispielcode wird gezeigt, wie einem Workflowhost ein Nachverfolgungsprofil hinzugefügt wird.

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 Nachverfolgungsprofilen finden Sie unter Überwachungsprofile.

Konfigurieren der Nachverfolgung mit WorkflowInvoker

Um die Nachverfolgung für einen mit WorkflowInvoker ausgeführten Workflow zu konfigurieren, fügen Sie den Nachverfolgungsanbieter als Erweiterung einer WorkflowInvoker-Instanz hinzu. Der folgende Beispielcode stammt aus dem Beispiel Benutzerdefinierte Nachverfolgung.

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

Anzeigen von Nachverfolgungsdatensätzen in der Ereignisanzeige

Es gibt zwei Ereignisanzeigeprotokolle, die bei der Nachverfolgung der WF-Ausführung besonders von Interesse sind: das Analyseprotokoll und das Debugprotokoll. Beide befinden sich unter dem Knoten "Microsoft|Windows|Application Server-Applications". Protokolle in diesem Abschnitt enthalten Ereignisse einer einzelnen Anwendung und keine Ereignisse, die Auswirkungen auf das gesamte System haben.

Ereignisse zur Debugablaufverfolgung werden in das Debugprotokoll geschrieben. Um WF-Debugablaufverfolgungs-Ereignisse in der Ereignisanzeige zu sammeln, aktivieren Sie das Debugprotokoll.

  1. Klicken Sie zum Öffnen der Ereignisanzeige auf Start und dann auf Ausführen. Geben Sie im Dialogfeld „Ausführen“ die Zeichenfolge eventvwr ein.

  2. Erweitern Sie im Dialogfeld „Ereignisanzeige“ den Knoten Anwendungs- und Dienstprotokolle.

  3. Erweitern Sie die Knoten Microsoft, Windows und Anwendungsserver-Anwendungen.

  4. Klicken Sie mit der rechten Maustaste auf den Knoten Debuggen unter dem Knoten Anwendungsserver-Anwendungen, und wählen Sie Protokoll aktivieren aus.

  5. Führen Sie die für die Ablaufverfolgung aktivierte Anwendung aus, um Ablaufverfolgungsereignisse zu generieren.

  6. Klicken Sie mit der rechten Maustaste auf den Knoten Debuggen, 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 Nachverfolgungsdatensätze für Fehler in ETW ausgegeben. ETW-Nachverfolgungsereignisse (im Bereich von 100-113), die den vom ETW-Nachverfolgungsteilnehmer ausgegebenen Nachverfolgungsereignissen entsprechen, werden in das Analyseprotokoll geschrieben.

Gehen Sie wie folgt vor, um Nachverfolgungsdatensätze anzuzeigen.

  1. Klicken Sie zum Öffnen der Ereignisanzeige auf Start und dann auf Ausführen. Geben Sie im Dialogfeld „Ausführen“ die Zeichenfolge eventvwr ein.

  2. Erweitern Sie im Dialogfeld „Ereignisanzeige“ den Knoten Anwendungs- und Dienstprotokolle.

  3. Erweitern Sie die Knoten Microsoft, Windows und Anwendungsserver-Anwendungen.

  4. Klicken Sie mit der rechten Maustaste auf den Knoten Analytisch unter dem Knoten Anwendungsserver-Anwendungen, und wählen Sie Protokoll aktivieren aus.

  5. Führen Sie die für die Nachverfolgung aktivierte Anwendung aus, um Nachverfolgungsdatensätze zu generieren.

  6. Klicken Sie mit der rechten Maustaste auf den Knoten Analytisch, und wählen Sie Aktualisieren aus. Nachverfolgungsdatensätze sollten im mittleren Bereich angezeigt werden.

Das folgende Bild zeigt Nachverfolgungsereignisse in der Ereignisanzeige:

Screenshot of the Event Viewer showing tracking records.

Registrieren einer anwendungsspezifischen Anbieter-ID

Wenn Ereignisse in ein bestimmtes Anwendungsprotokoll geschrieben werden müssen, führen Sie folgende 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\<aktuelle 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 wollen.

    <provider name="Microsoft-Windows-Application Server-Applications" guid="{2720e974-9fe9-477a-bb60-81fe3bf91eec}" />
    
  5. Wenn Sie den Anbieternamen im vorherigen Schritt änderten, ä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 folgende Schritte ausführen.

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

    2. Führen Sie in einer Windows SDK-Eingabeaufforderung mc.exe für die neue 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 mit dem Namen NewProviderReg.cs.

    5. Erstellen Sie eine Ressourcen-DLL mithilfe des C#-Compilers.

      csc /target:library /win32res:Microsoft.Windows.ApplicationServer.Applications_Provider1.res NewProviderReg.cs /out:Microsoft.Windows.ApplicationServer.Applications_Provider1.dll
      
    6. Ändern Sie den Ressourcen- und Meldungs-DLL-Namen in der Manifestdatei von Microsoft.Windows.ApplicationServer.Applications.Provider1.man in den 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