Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das CustomTracking-Beispiel veranschaulicht, wie ein benutzerdefinierter Tracking-Teilnehmer erstellt und der Inhalt der Tracking-Daten in die Konsole geschrieben wird. Darüber hinaus veranschaulicht das Beispiel, wie CustomTrackingRecord-Objekte ausgegeben werden, die mit benutzerdefinierten Daten gefüllt sind. Der konsolenbasierte Verfolgungsteilnehmer filtert die vom Workflow ausgegebenen TrackingRecord-Objekte mithilfe eines im Code erstellten Tracking-Profilobjekts.
Beispieldetails
Windows Workflow Foundation (WF) bietet eine Tracking-Infrastruktur zum Nachverfolgen der Ausführung einer Workflowinstanz. Die Tracking-Laufzeit implementiert eine Workflow-Instanz, die Ereignisse im Zusammenhang mit dem Workflow-Lebenszyklus, Ereignisse aus Workflow-Aktivitäten und benutzerdefinierte Tracking-Ereignisse generiert. In der folgenden Tabelle sind die primären Komponenten der Tracking-Infrastruktur aufgeführt.
| Komponente | BESCHREIBUNG |
|---|---|
| Überwachungslaufzeit | Stellt die Infrastruktur zum Erstellen von Tracking-Aufzeichnungen bereit. |
| Nachverfolgen von Teilnehmern | Verarbeitet die Nachverfolgungsdatensätze. .NET Framework 4 wird mit einem Nachverfolgungsteilnehmer geliefert, der Nachverfolgungsdatensätze als Ereignisse der Ereignisablaufverfolgung für Windows (ETW) schreibt. |
| Überwachungsprofil | Ein Filtermechanismus, mit dem ein Nachverfolgungsteilnehmer eine Teilmenge der von einer Workflowinstanz ausgegebenen Tracking-Datensätze abonniert. |
In der folgenden Tabelle sind die Tracking-Datensätze aufgeführt, die von der Workflow-Runtime emittiert werden.
| Nachverfolgungsdatensatz | BESCHREIBUNG |
|---|---|
| Überwachungsdatensätze zur Workflowinstanz. | Beschreibt den Lebenszyklus der Workflowinstanz. Beispielsweise wird ein Instanzdatensatz ausgegeben, wenn der Workflow gestartet oder abgeschlossen wird. |
| Nachverfolgungsdatensätze zum Aktivitätszustand. | Führen Einzelheiten zur Aktivitätsausführung auf. Diese Datensätze geben den Status einer Workflowaktivität an, z. B. wenn eine Aktivität geplant wird oder wenn die Aktivität abgeschlossen ist oder wenn ein Fehler ausgelöst wird. |
| Datensatz zur Wiederaufnahme von Lesezeichen. | Wird ausgegeben, wenn eine Textmarke innerhalb einer Workflowinstanz wieder aufgenommen wird. |
| Benutzerdefinierte Nachverfolgungsdatensätze. | Ein Workflowautor kann benutzerdefinierte Nachverfolgungsdatensätze erstellen und innerhalb der 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 Tracking-Datensatztyps ermöglichen. Nachverfolgungsprofile können im Code oder in der Konfiguration angegeben werden.
Benutzerdefinierte Nachverfolgungskomponente
Die Tracking-Teilnehmer-API ermöglicht die Erweiterung der Tracking-Laufzeit mit einem vom Benutzer bereitgestellten Tracking-Teilnehmer, der benutzerdefinierte Logik zum Behandeln TrackingRecord von Objekten enthalten kann, die von der Workflowlaufzeit ausgegeben werden.
Zum Schreiben einer Nachverfolgungskomponente muss der Benutzer TrackingParticipant implementieren. Insbesondere muss die Track Methode vom benutzerdefinierten Teilnehmer 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);
}
Der vollständige Nachverfolgungsteilnehmer wird in der datei ConsoleTrackingParticipant.cs implementiert. Das folgende Codebeispiel ist die Track Methode für den benutzerdefinierten Tracking-Teilnehmer.
protected 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));
}
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null)
{
IDictionary<String, object> variables = activityStateRecord.Variables;
StringBuilder vars = new StringBuilder();
if (variables.Count > 0)
{
vars.AppendLine("\n\tVariables:");
foreach (KeyValuePair<string, object> variable in variables)
{
vars.AppendLine(String.Format(
"\t\tName: {0} Value: {1}", variable.Key, variable.Value));
}
}
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateRecord.Activity.Name, activityStateRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
Console.WriteLine();
}
Im folgenden Codebeispiel wird der Konsolenteilnehmer dem Workflow-Aufrufer hinzugefügt.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Ausgabe von benutzerdefinierten Tracking-Aufzeichnungen
In diesem Beispiel wird auch gezeigt, wie aus einer benutzerdefinierten Workflowaktivität Objekte CustomTrackingRecord ausgegeben werden können:
Die CustomTrackingRecord Objekte werden erstellt und mit benutzerdefinierten Daten aufgefüllt, die mit dem Datensatz ausgegeben werden sollen.
CustomTrackingRecord wird durch Aufrufen der Nachverfolgungsmethode von 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 mit Visual Studio die CustomTrackingSample.sln Projektmappendatei.
Drücken Sie STRG+UMSCHALT+B, um die Solution zu erstellen.
Drücken Sie STRG+F5, um die Lösung auszuführen.