Beispiel für das Überwachen mit Benutzerüberwachungspunkten

Download sample

Dieses Beispiel veranschaulicht die Verwendung des SQL-Überwachungsdiensts, der von Windows Workflow Foundation zum Überwachen der Ausführung eines Workflows bereitgestellt wird.

Die Workflowlaufzeit löst beim Ausführen eines Workflows bestimmte Ereignisse aus. Der Überwachungsdienst kann diese Ereignisse abfangen und Informationen zu den Ereignissen in einer SQL Server-Datenbank, die abgefragt werden kann, speichern.

Die Workflowlaufzeit löst die folgenden Ereignistypen aus:

  • Ereignisse auf Workflowinstanzebene. Diese Ereignisse werden ausgelöst, wenn eine Workflowinstanz in einen bestimmten Zustand wechselt. Beispielsweise wird ein Ereignis ausgelöst, wenn die Workflowinstanz initialisiert oder ausgeführt wird.

  • Ereignisse auf Aktivitätsebene. Ein Workflow besteht aus Aktivitäten, die ihrem eigenen Lebenszyklus folgen. Jede Aktivität durchläuft im Laufe ihres Lebenszyklus mehrere Zustände. Sobald eine Aktivität einen bestimmten Zustand erreicht, wird ein Ereignis ausgelöst.

  • Vom Benutzer überwachte Ereignisse. Ein Workflowautor kann benutzerdefinierte Überwachungsereignisse erstellen und sie dem Code-Beside-Bereich des Workflows hinzufügen.

Daten aus dem Workflowdatenkontext können ausgegeben und zusammen mit den Ereignissen an den Überwachungsdienst übergeben werden.

Wenn Sie einen Workflow überwachen, sind Sie möglicherweise nicht an allen Ereignissen für alle Zustände und Aktivitäten interessiert. Sie können ein Überwachungsprofil erstellen, um die gewünschten Ereignisse und Daten anzugeben.

Schreiben von benutzerdefinierten Überwachungspunkten

Möglicherweise möchten Sie Daten an einem bestimmten Punkt der Workflowausführung überwachen, der nicht von den Überwachungsereignissen überwacht wird. In diesem Fall können Sie benutzerdefinierte Überwachungspunkte verwenden. Zum Erstellen eines benutzerdefinierten Überwachungspunkts verwenden Sie die TrackData-Methode, die für die Datenkontextklasse bereitgestellt wird. Die TrackData-Methode verwendet ein Argument eines Objekts. Das bedeutet, dass Sie alle Daten ausgeben können, die Sie überwachen möchten. In dem Beispielworkflow wird ein benutzerdefinierter Überwachungspunkt im Codehandler der Codeaktivität erstellt.

Erstellen des benutzerdefinierten Überwachungsprofils

Das Beispiel veranschaulicht die Erstellung eines benutzerdefinierten Überwachungsprofils zum Überwachen des Benutzerüberwachungspunkts. Dieses Profil wird in die SQL-Überwachungsdatenbank eingefügt, um die angegebenen Ereignisse zu überwachen. Das Überwachungsprofil wird anhand des Überwachungsprofil-Objektmodells erstellt.

Das Überwachungsprofil-Objektmodell stellt mehrere Klassen bereit, die die Erstellung von Instanz-, Aktivitäts- und Benutzerüberwachungspunkten vereinfachen. Jeder Überwachungspunkt enthält zudem einen Satz Abgleichspositionen. Eine Abgleichsposition beschreibt das zu überwachende Ereignis (das für einen Instanzüberwachungspunkt und einen Aktivitätsüberwachungspunkt unterschiedlich ist) und die zu überwachende Aktivität (oder den zu überwachenden Workflow im Fall eines Instanzüberwachungspunkts).

Die zu extrahierenden Daten können auch im Überwachungspunkt angegeben werden. In diesem Beispiel wurden keine zu extrahierenden Daten angegeben.

Verwenden Sie den folgenden Code, um das Überwachungsprofil zum Überwachen des Benutzerüberwachungspunkts zu erstellen:

TrackingProfile profile = new TrackingProfile();

ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    location.ExecutionStatusEvents.Add(s);
}

trackPoint.MatchingLocations.Add(location);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");


// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();

// Adding a user location to the track point. 
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);


// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);

Im vorherigen Codebeispiel geben die letzten vier Zeilen an, wie das Überwachungsprofil in ein XML-Format serialisiert und in der Überwachungsdatenbank gespeichert werden kann. Nachdem das Überwachungsprofil serialisiert wurde, sieht es folgendermaßen aus:

<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>

<TrackingProfile xmlns=\"https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile\" version=\"3.0.0.0\">

<TrackPoints> <ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

<UserTrackPoint>

<MatchingLocations>

<UserTrackingLocation>

<Activity>

<Type>System.Workflow.Activities.CodeActivity, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<Argument>

<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>

<MatchDerivedTypes>false</MatchDerivedTypes>

</Argument>

</UserTrackingLocation>

</MatchingLocations>

</UserTrackPoint>

</TrackPoints>

</TrackingProfile>

Das Überwachungsprofil wird anhand des Überwachungsprofilschemas erstellt.

Einfügen des Überwachungsprofils in die SQL-Überwachungsdatenbank

Das Überwachungsprofil wird mit der gespeicherten Prozedur UpdateTrackingProfile in die Überwachungsprofildatenbank eingefügt. Die gespeicherte Prozedur speichert das Profil für einen bestimmten Workflowtyp. Wenn die Laufzeit vom Überwachungsdienst ein Profil für den Typ anfordert, gibt der Überwachungsdienst anstelle des Standardprofils dieses benutzerdefinierte Profil zurück.

Registrieren des Überwachungsdiensts beim Workflowhost

Verwenden Sie den folgenden Code, um einen Überwachungsdienst bei der Workflowlaufzeit zu registrieren:

WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.StartRuntime();

Mit der zweiten Zeile wird der SQL-Überwachungsdienst bei der Workflowlaufzeit registriert. Die Verbindungszeichenfolge ist die der Überwachungsdatenbank.

Erstellen der Überwachungsdatenbank

Die von Windows Workflow Foundation installierten SQL-Dienste verwenden Microsoft SQL Server, um Informationen zu speichern. Sie können für diese Aufgaben Microsoft SQL Server 2005 Express, SQL Server 2000 oder höhere Versionen oder SQL Server 2000 Desktop Engine (MSDE) verwenden.

Das Setup von Windows Workflow Foundation installiert nicht die Datenbanken, die von diesen Diensten benötigt werden. Das Setup installiert jedoch die SQL-Skripte zum Erstellen und Konfigurieren der Datenbanken für diese Dienste.

So erstellen Sie die SQL-Überwachungsdatenbank

  1. Erstellen Sie mit Microsoft SQL Server 2005 Express, SQL Server 2000 oder höheren Versionen oder mit SQL Server 2000 Desktop Engine (MSDE) eine neue Datenbank mit dem Namen Tracking, indem Sie die folgende SQL-Abfrageanweisung verwenden:

    CREATE DATABASE Tracking

    Hinweis   Wenn Sie sowohl SqlTrackingService als auch SqlWorkflowPersistenceService in einer Workflowanwendung verwenden, wird empfohlen, dass Sie eine einzige Datenbank für Persistenz und Überwachung verwenden.

  2. Wählen Sie im SQL Query Analyzer-Arbeitsbereich die in Schritt 1 erstellte Datenbank aus der Liste der verfügbaren Datenbanken aus.

  3. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\Tracking_Schema.sql.

  4. Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die Tabellen des SQL-Überwachungsdiensts zu erstellen.

  5. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\Tracking_Logic.sql.

  6. Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die gespeicherten Prozeduren des SQL-Überwachungsdiensts zu erstellen.

So erstellen Sie das Beispiel

  1. Laden Sie das Beispiel herunter, indem Sie auf Beispiel downloaden klicken.

    Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.

  2. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.

  3. Wechseln Sie zum Quellverzeichnis des Beispiels.

  4. Geben Sie an der Eingabeaufforderung MSBUILD <Name der Projektmappendatei> ein.

So führen Sie das Beispiel aus

  • Führen Sie im Eingabeaufforderungsfenster des SDKs die EXE-Datei im Ordner UserTrackPoints\bin\debug aus (bzw. im Ordner UserTrackPoints\bin für die VB-Version des Beispiels), der sich unter dem Hauptordner des Beispiels befindet.

Siehe auch

Referenz

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

Weitere Ressourcen

Überwachungsbeispiele
Einfaches Überwachungsbeispiel
Beispiel für die Abfrage mit SQLTrackingService
EventArgs-Überwachungsbeispiel
ConsoleTrackingService-Beispiel
Beispiel für die Abfrage mit SQLTrackingService
RuleActionTrackingEvent-Beispiel
Beispiel für einen Dateiüberwachungsdienst und Abfrage
Beispiel für das Verwenden des Überwachungsprofil-Objektmodells
Beispiel für die SQL-Datenpflege
Windows Workflow Tracking Services

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.