Beispiel für das Verwenden von Persistenzdiensten
In diesem Beispiel wird veranschaulicht, wie der SqlWorkflowPersistenceService-Dienst zum Laden und Entladen von Workflows verwendet wird.
Die Ausführung vieler Geschäftsprozesse nimmt eine sehr lange Zeit in Anspruch (mehrere Monate oder sogar Jahre). Das Speichern des Workflows im Speicher ist nicht nur unpraktisch (aufgrund des begrenzten Speichers), sondern verhindert auch die Skalierung, da eine Instanz auf einem einzelnen Server verarbeitet werden muss. Viele dieser langfristigen Workflows führen keine Fluss- oder Prozesslogik aktiv aus, sondern befinden sich im Endeffekt im Leerlauf und warten auf Eingaben von Benutzern oder anderen Systemen. Indem eine im Leerlauf befindliche Instanz entladen wird, kann die Hostanwendung Arbeitsspeicher sparen und die Skalierbarkeit über die verarbeitenden Server hinweg aktivieren. Dieses Beispiel veranschaulicht, wie eine im Leerlauf befindliche Instanz mit einem einfachen Workflow, der fünf Sekunden vor Beendigung wartet, entladen werden kann.
Tipp
SqlWorkflowPersistenceService kann auch für das automatische Entladen im Leerlauf befindlicher Workflows festgelegt werden, indem der UnloadOnIdle-Parameter im Konstruktor auf true festgelegt wird.
Datenbankkonfiguration
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.
Tipp
Der Microsoft Distributed Transaction Coordinator (MSDTC)-Dienst muss aktiviert werden, damit SqlWorkflowPersistenceService funktioniert.
Anhand der folgenden Schritte wird beschrieben, wie Sie die von den Diensten in diesem Beispiel verwendeten Datenbanken erstellen und konfigurieren.
So erstellen und konfigurieren Sie die SQL-Datenbank
Erstellen Sie mit 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 SqlPersistenceService, indem Sie die folgende SQL-Abfrageanweisung verwenden:
CREATE DATABASE SqlPersistenceService
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.
Wählen Sie im SQL Query Analyzer-Arbeitsbereich die in Schritt 1 erstellte Datenbank aus der Liste der verfügbaren Datenbanken aus.
Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistenceService_Schema.
Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die SQL Persistence Service-Tabellen zu erstellen.
Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistenceService_Logic.
Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die gespeicherten Prozeduren von SQL Persistence Service zu erstellen.
Exemplarische Vorgehensweise
Der Workflow ist ein sequenzieller Workflow, der drei aufeinander folgende Aktivitäten enthält: code1, delay1 und code2. Die CodeActivity-Aktivitäten schreiben die aktuelle UTC-DateTime in die Konsole, und die DelayActivity-Aktivität wartet fünf Sekunden, bevor sie fortfährt. Die Hostanwendung verwaltet das allgemeine Laden und Entladen der Workflowinstanz in den bzw. aus dem Speicher, indem sie Handler für verschiedene WorkflowRuntime-Ereignisse bereitstellt.
Die Ausführung erfolgt folgendermaßen:
Der Workflow wird erstellt und vom Host gestartet.
Code1 zeigt die aktuelle UTC-DateTime in der Konsole an.
Der Workflow springt in die delay1-Aktivität.
Die Workflowinstanz befindet sich jetzt im Leerlauf und wartet, dass der Zeitgeber abläuft. Wenn sich der Workflow im Leerlauf befindet, führt dies dazu, dass WorkflowRuntime das WorkflowIdled-Ereignis auslöst.
Die Unload-Methode ruft den SqlWorkflowPersistenceService-Dienst auf, um die Workflowinstanz beizubehalten. Die Workflowlaufzeit gibt dann die Workflowinstanz frei.
Nach mindestens fünf Sekunden läuft der Zeitgeber ab.
Der SqlWorkflowPersistenceService-Dienst lädt den Workflow aus der Datenbank, und die Laufzeit setzt die Verarbeitung fort.
Code2 zeigt dann die aktuelle UTC-DateTime in der Konsole an. DateTime sollte fünf Sekunden später liegen als die von code1 angezeigte Zeit.
Wenn die Workflowinstanz abgeschlossen ist, ruft die Workflowlaufzeit, den SqlWorkflowPersistenceService-Dienst auf, um den letzten Status des Workflows beizubehalten.
Benutzerdefinierte Dienste
In diesem Beispiel werden die vordefinierten Dienste für die Statuspersistenz verwendet. Sie können jedoch auch benutzerdefinierte Statuspersistenzdienste erstellen. Sie müssen dies möglicherweise vornehmen, um aktuelle Datenbanksysteme verwenden oder weitere Funktionen bereitstellen zu können. Weitere Informationen über die Entwicklung benutzerdefinierter Dienste finden Sie in den in diesem Thema aufgeführten Beispielen und in der Dokumentation zu Windows Workflow Foundation.
So erstellen Sie das Beispiel
Laden Sie das Beispiel herunter, indem Sie auf Beispiel downloaden klicken.
Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.
Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.
Wechseln Sie zum Quellverzeichnis des Beispiels.
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 PersistenceServices\bin\debug aus (bzw. im Ordner PersistenceServices\bin für die VB-Version des Beispiels), der sich unter dem Hauptordner des Beispiels befindet.
Siehe auch
Referenz
SqlWorkflowPersistenceService
WorkflowPersistenceService
Weitere Ressourcen
Beispiel für einen benutzerdefinierten Persistenzdienst
Beispiel für das Auslösen eines Ereignisses zum Laden eines Workflows
Windows Workflow Persistence Services
Exercise 4 : Using Runtime Services
Using the SqlWorkflowPersistenceService Service
Hosting-Beispiel
Task 3 : Using the Windows Workflow Persistence Service
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.