Benutzerdefinierte Nachverfolgung
Dieses Thema gilt für Windows Workflow Foundation 4.
Anhand dieses Beispiels wird veranschaulicht, wie eine benutzerdefinierte Nachverfolgungskomponente erstellt und der Inhalt der Nachverfolgungsdaten in die Konsole geschrieben wird. Außerdem wird veranschaulicht, wie mit benutzerdefinierten Daten aufgefüllte CustomTrackingRecord-Objekte ausgegeben werden. Die konsolenbasierte Nachverfolgungskomponente filtert die vom Workflow ausgegebenen TrackingRecord-Objekte mit einem im Code erstellten Nachverfolgungsprofilobjekt.
Beispieldetails
Windows Workflow Foundation (WF) stellt eine Infrastruktur zur Nachverfolgung der Ausführung einer Workflowinstanz bereit. Die Nachverfolgungslaufzeit implementiert eine Workflowinstanz, um Ereignisse in Verbindung mit dem Workflowlebenszyklus, Ereignisse aus den Workflowaktivitäten sowie benutzerdefinierte Nachverfolgungsereignisse auszugeben. In der folgenden Tabelle sind die primären Komponenten der Nachverfolgungsinfrastruktur aufgeführt.
Komponente | Beschreibung |
---|---|
Nachverfolgungslaufzeit |
Stellt die Infrastruktur zur Ausgabe von Nachverfolgungsdatensätzen bereit. |
Nachverfolgungskomponente |
Verwendet die Nachverfolgungsdatensätze. .NET Framework 4 wird mit einer Nachverfolgungskomponente geliefert, die Nachverfolgungsdatensätze als Ereignisse der Ereignisablaufverfolgung für Windows (ETW) schreibt. |
Nachverfolgungsprofil |
Ein Filtermechanismus, der einer Nachverfolgungskomponente das Abonnieren einer Teilmenge der Nachverfolgungsdatensätze ermöglicht, die von einer Workflowinstanz ausgegeben werden. |
In der folgenden Tabelle werden die Nachverfolgungsdatensätze aufgeführt, die von der Workflowlaufzeit ausgegeben werden.
Nachverfolgungsdatensatz | Beschreibung |
---|---|
Nachverfolgungsdatensätze zur Workflowinstanz. |
Beschreiben den Lebenszyklus der Workflowinstanz. Wenn der Workflow gestartet oder abgeschlossen wird, wird beispielsweise ein Instanzdatensatz ausgegeben. |
Nachverfolgungsdatensä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 Nachverfolgungsdatensätze. |
Ein Workflowautor kann benutzerdefinierte Nachverfolgungsdatensätze erstellen und in einer benutzerdefinierten Aktivität ausgeben. |
Die Nachverfolgungskomponente abonniert eine Teilmenge der ausgegebenen TrackingRecord-Objekte mit Nachverfolgungsprofilen. Ein Nachverfolgungsprofil enthält Nachverfolgungsabfragen, die das Abonnieren eines bestimmten Typs von Nachverfolgungsdatensätzen ermöglichen. Nachverfolgungsprofile können im Code oder in der Konfiguration angegeben werden.
Benutzerdefinierte Nachverfolgungskomponente
Die API der Nachverfolgungskomponente ermöglicht eine Erweiterung der Nachverfolgungslaufzeit mit einer vom Benutzer bereitgestellten Nachverfolgungskomponente. Diese kann benutzerdefinierte Logik enthalten, mit der von der Workflowlaufzeit ausgegebene TrackingRecord-Objekte behandelt werden.
Zum Schreiben einer Nachverfolgungskomponente muss der Benutzer TrackingParticipant implementieren. Die Track-Methode muss von der benutzerdefinierten Komponente implementiert werden. Diese Methode wird aufgerufen, wenn ein TrackingRecord-Objekt von der Workflowlaufzeit ausgegeben wird.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
}
Die vollständige Nachverfolgungskomponente wird in der Datei "ConsoleTrackingParticipant.cs" implementiert. Das folgende Codebeispiel enthält die Track-Methode für die benutzerdefinierte Nachverfolgungskomponente.
public override void Track(TrackingRecord record, TimeSpan timeout)
{
...
WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
if (workflowInstanceRecord != null)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" Workflow InstanceID: {0} Workflow instance state: {1}",
record.InstanceId, workflowInstanceRecord.State));
}
ActivityStateTrackingRecord activityStateTrackingRecord = record as ActivityTrackingRecord;
if (activityStateTrackingRecord != null)
{
...
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateTrackingRecord.Name, activityStateTrackingRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
}
Im folgenden Codebeispiel wird die Konsolenkomponente der Workflowinstanz hinzugefügt.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInstance wfInstance = new WorkflowInstance(BuildSampleWorkflow());
wfInstance.Extensions.Add(customTrackingParticipant);
Ausgeben von benutzerdefinierten Nachverfolgungsdatensätzen
In diesem Beispiel wird auch die Fähigkeit zur Ausgabe von CustomTrackingRecord-Objekten aus einer benutzerdefinierten Workflowaktivität veranschaulicht:
Die CustomTrackingRecord-Objekte werden erstellt und mit benutzerdefinierten Daten aufgefüllt, die mit dem Datensatz ausgegeben werden sollen.
Das CustomTrackingRecord-Objekt wird durch Aufrufen der Nachverfolgungsmethode des ActivityContext ausgegeben.
Im folgenden Beispiel wird veranschaulicht, wie CustomTrackingRecord-Objekte innerhalb einer benutzerdefinierten Aktivität ausgegeben werden.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
So verwenden Sie dieses Beispiel
Öffnen Sie in Visual Studio 2010 die Projektmappendatei "CustomTrackingSample.sln".
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie STRG+F5, um die Projektmappe auszuführen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Basic\Tracking\CustomTracking
|