Freigeben über


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

  1. Öffnen Sie in Visual Studio 2010 die Projektmappendatei "CustomTrackingSample.sln".

  2. Drücken Sie F6, um die Projektmappe zu erstellen.

  3. Drücken Sie STRG+F5, um die Projektmappe auszuführen.

Dd807381.Important(de-de,VS.100).gif 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