Nachverfolgen von Ereignissen in der Ereignisablaufverfolgung in Windows
Im EtwTracking-Beispiel wird veranschaulicht, wie die Windows Workflow Foundation-Nachverfolgung in einem Workflowdienst aktiviert wird und die Überwachungsereignisse in der Ereignisablaufverfolgung für Windows (ETW) ausgegeben werden. In dem Beispiel wird der ETW-Überwachungsteilnehmer (EtwTrackingParticipant) zur Ausgabe von Workflowüberwachungsdatensätzen in ETW verwendet.
Der Workflow in dem Beispiel erhält eine Anforderung, weist den Umkehrwert der Eingabedaten der Eingabevariablen zu und gibt den Umkehrwert an den Client zurück. Wenn die Eingabedaten 0 betragen, tritt eine nicht behandelte Ausnahme aufgrund einer Division durch 0 (null) auf, aufgrund der der Workflow abgebrochen wird. Wenn die Nachverfolgung aktiviert ist, wird der Fehlerdatensatz an ETW ausgegeben, sodass der Fehler später behoben werden kann. Der ETW-Überwachungsteilnehmer ist mit einem Überwachungsprofil konfiguriert, um Überwachungsdatensätze zu abonnieren. Das Überwachungsprofil ist in der Datei "Web.config" definiert und für den ETW-Überwachungsteilnehmer als Konfigurationsparameter bereitgestellt. Der ETW-Überwachungsteilnehmer ist in der Datei "Web.config" des Workflowdiensts konfiguriert und wird auf den Dienst als Dienstverhalten angewendet. In diesem Beispiel zeigen Sie die Überwachungsereignisse im Ereignisprotokoll mithilfe der Ereignisanzeige an.
Workflowüberwachungsdetails
Windows Workflow Foundation stellt eine Infrastruktur zur Nachverfolgung der Ausführung einer Workflowinstanz bereit. Die Überwachungslaufzeit erstellt eine Workflowinstanz, um Ereignisse in Verbindung mit dem Workflowlebenszyklus, Ereignisse aus den Workflowaktivitäten sowie benutzerdefinierte Ereignissen auszugeben. In der folgenden Tabelle sind die primären Komponenten der Überwachungsinfrastruktur aufgeführt.
Komponente | BESCHREIBUNG |
---|---|
Überwachungslaufzeit | Stellt die Infrastruktur bereit, um Überwachungsdatensätze auszugeben. |
Überwachungsteilnehmer | Greift auf die Nachverfolgungsdatensätze zu. .NET Framework 4.6.1 wird mit einem Nachverfolgungsteilnehmer geliefert, der Nachverfolgungsdatensätze als Ereignisse der Ereignisablaufverfolgung für Windows (ETW) schreibt. |
Überwachungsprofil | Ein Filtermechanismus, der einem Überwachungsteilnehmer das Abonnieren einer Teilmenge der Überwachungsdatensätze ermöglicht, die von einer Workflowinstanz ausgegeben werden. |
In der folgenden Tabelle sind die Überwachungsdatensätze aufgeführt, die von der Workflowlaufzeit ausgegeben werden.
Überwachungsdatensatz | BESCHREIBUNG |
---|---|
Überwachungsdatensätze zur Workflowinstanz. | Beschreibt den Lebenszyklus der Workflowinstanz. Wenn der Workflow gestartet oder abgeschlossen wird, wird beispielsweise ein Instanzdatensatz ausgegeben. |
Überwachungsdatensätze zum Aktivitätszustand. | Führen Einzelheiten zur Aktivitätsausführung auf. Diese Datensätze geben den Zustand einer Workflowaktivität an, z. B. wenn eine Aktivität geplant oder abgeschlossen wird oder wenn ein Fehler ausgelöst wird. |
Datensatz zur Wiederaufnahme von Lesezeichen. | Wird immer dann ausgegeben, wenn ein Lesezeichen in einer Workflowinstanz wieder aufgenommen wird. |
Benutzerdefinierte Überwachungsdatensätze. | Ein Workflowautor kann benutzerdefinierte Überwachungsdatensätze erstellen und in einer benutzerdefinierten Aktivität ausgeben. |
ActivityScheduledRecord | Dieser Datensatz wird ausgegeben, wenn eine Aktivität eine andere Aktivität plant. |
FaultPropagationRecord | Dieser Datensatz wird ausgegeben, wenn ein Fehler von einer Aktivität weitergegeben wird. |
CancelRequestedRecord | Dieser Datensatz wird ausgegeben, wenn eine Aktivität von einer anderen Aktivität abgebrochen wird. |
Der Überwachungsteilnehmer abonniert eine Teilmenge der ausgegebenen Überwachungsdatensätze mithilfe von Überwachungsprofilen. Ein Überwachungsprofil enthält Überwachungsabfragen, die das Abonnieren eines bestimmten Typs von Überwachungsdatensätzen ermöglichen. Überwachungsprofile können im Code oder in der Konfiguration angegeben werden.
So verwenden Sie dieses Beispiel
Öffnen Sie in Visual Studio die Projektmappendatei „EtwTrackingParticipantSample.sln“.
Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.
Drücken Sie F5, um die Projektmappe auszuführen.
Standardmäßig überwacht der Dienst Port 53797 (
http://localhost:53797/SampleWorkflowService.xamlx
).Öffnen Sie den WCF-Testclient über den Datei-Explorer.
Der WCF-Testclient (WcfTestClient.exe) befindet sich unter „<Visual Studio-Installationsordner>\Common7\IDE\“.
Der Standardinstallationsordner für Visual Studio ist „C:\Programme\Microsoft Visual Studio 10.0“.
Wählen Sie im WCF-Testclient im Menü Datei die Option Dienst hinzufügen aus.
Fügen Sie die Endpunktadresse im Eingabefeld hinzu. Der Standardwert lautet
http://localhost:53797/SampleWorkflowService.xamlx
.Öffnen Sie die Ereignisanzeige.
Starten Sie vor dem Aufrufen des Diensts die Ereignisanzeige über das Menü Start, wählen Sie Ausführen aus, und geben Sie
eventvwr.exe
ein. Stellen Sie sicher, dass das Ereignisprotokoll eine Überwachung für vom Workflowdienst ausgegebene Überwachungsereignisse ausführt.Navigieren Sie in der Strukturansicht der Ereignisanzeige zu Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft. Klicken Sie mit der rechten Maustaste auf Microsoft, wählen Sie Ansicht aus, und wählen Sie Analytische und Debugprotokolle einblenden aus, um die Analyse- und Debugprotokolle zu aktivieren.
Stellen Sie sicher, dass die Option Analytische und Debugprotokolle einblenden aktiviert ist.
Navigieren Sie in der Strukturansicht der Ereignisanzeige zu Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > Application Server-Anwendungen. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll aktivieren aus, um das Protokoll Analytisch zu aktivieren.
Testen Sie den Dienst mithilfe des WCF-Testclients, indem Sie auf
GetData
doppelklicken.Dadurch wird die
GetData
-Methode geöffnet. Die Anforderung akzeptiert einen Parameter und stellt sicher, dass der Wert 0 beträgt, was dem Standard entspricht.Klicken Sie auf Aufrufen.
Achten Sie auf die vom Workflow ausgegebenen Ereignisse.
Wechseln Sie zurück zur Ereignisanzeige, und navigieren Sie zu Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > Application Server-Anwendungen. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Aktualisieren aus.
Die Workflowereignisse werden in der Ereignisanzeige angezeigt. Beachten Sie, dass Workflowausführungsereignisse angezeigt werden und dass es sich bei einem dieser Ereignisse um eine unbehandelte Ausnahme handelt, die dem Fehler im Workflow entspricht. Es wird auch ein Warnungsereignis von der Workflowaktivität ausgegeben, das angibt, dass die Aktivität einen Fehler auslöst.
Wiederholen Sie Schritt 9 und 10, und geben Sie andere Daten als 0 ein, damit kein Fehler ausgelöst wird.
Mithilfe von Nachverfolgungsprofilen können Sie Ereignisse abonnieren, die von der Laufzeit ausgegeben werden, wenn sich der Zustand eines Workflowinstanz ändert. In Abhängigkeit von Ihren Überwachungsanforderungen können Sie ein Profil erstellen, das sehr grob gehalten ist und einen kleinen Satz von unspezifischen Zustandsänderungen eines Workflows abonniert. Sie können jedoch auch ein sehr präzises Profil erstellen, dessen Ausgabe so umfangreich ist, dass später die Ausführung rekonstruiert werden kann. In dem Beispiel sind die Ereignisse veranschaulicht, die mithilfe des HealthMonitoring Tracking Profile
, das eine geringe Menge von Ereignissen ausgibt, von der Workflowlaufzeit an ETW ausgegeben werden. Ein anderes Profil, das weitere Workflownachverfolgungsereignisse ausgibt, wird auch in der Datei "Web.config" mit dem Namen Troubleshooting Tracking Profile
bereitgestellt. Wenn .NET Framework 4.6.1 installiert ist, wird ein Standardprofil mit einem leeren Namen in der Datei „Machine.config“ konfiguriert. Dieses Profil wird von der ETW-Überwachungsverhaltenskonfiguration verwendet, wenn kein Profilname oder ein leerer Profilname angegeben wird.
Das Nachverfolgungsprofil für die Systemüberwachung gibt Workflowinstanzdatensätze und Aktivitätsdatensätze für die Fehlerweitergabe aus. Dieses Profil wird erstellt, indem einer Web.config-Konfigurationsdatei das folgende Nachverfolgungsprofil hinzugefügt wird.
<tracking>
<profiles>
<trackingProfile name="HealthMonitoring Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
<state name="Aborted"/>
<state name="UnhandledException"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
<faultPropagationQueries>
<faultPropagationQuery faultSourceActivityName ="*" faultHandlerActivityName="*"/>
</faultPropagationQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
Das Profil kann geändert werden, indem die EtwTrackingParticipant
-Konfiguration folgendermaßen geändert wird.
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="HealthMonitoring Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
So führen Sie eine Bereinigung aus (optional)
Öffnen Sie die Ereignisanzeige.
Navigieren Sie zu Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > Application Server-Anwendungen. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll deaktivieren aus.
Navigieren Sie zu Ereignisanzeige > Anwendungs- und Dienstprotokolle > Microsoft > Windows > Application Server-Anwendungen. Klicken Sie mit der rechten Maustaste auf Analytisch, und wählen Sie Protokoll löschen aus.
Wählen Sie die Option Löschen aus, um die Ereignisse zu löschen.
Bekanntes Problem
Hinweis
Es gibt ein bekanntes Problem in der Ereignisanzeige, bei dem bei der Decodierung von ETW-Ereignissen ein Fehler auftritt. Möglicherweise wird eine Fehlermeldung ähnlich der Folgenden angezeigt.
Die Beschreibung für die Ereignis-ID (<id>) unter „Microsoft > Windows > Application Server-Anwendungen“ wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, auf Ihrem lokalen Computer nicht installiert, oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren.
Wenn dieser Fehler auftritt, klicken Sie im Aktionsbereich auf "Aktualisieren". Das Ereignis sollte jetzt ordnungsgemäß decodiert werden.