Share via


Windows Workflow-Persistenzdienste

Die Ausführung vieler Geschäftsprozesse nimmt eine sehr lange Zeit in Anspruch (mehrere Monate oder sogar Jahre). Das Speichern des Workflows im Arbeitsspeicher ist nicht nur unpraktisch (aufgrund des begrenzten Arbeitsspeichers), 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. Von der Hostanwendung kann Arbeitsspeicher gespart und die Skalierbarkeit über die verarbeitenden Server hinweg aktiviert werden, indem eine im Leerlauf befindliche Instanz entladen wird.

Treten während der Ausführung eines Workflows bestimmte Bedingungen auf, wird vom Workflow-Laufzeitmodul zum Beibehalten von Zustandsinformationen zur Workflowinstanz ein Persistenzdienst verwendet, falls während der Laufzeit ein Persistenzdienst geladen wird. Zu diesen Bedingungen gehören z. B. folgende:

Wird eine dieser Bedingungen erfüllt und ein Persistenzdienst zum Laufzeitmodul hinzugefügt, werden vom Laufzeitmodul von einem Persistenzdienst bereitgestellte Methoden aufgerufen, um Zustandsinformationen zur Workflowinstanz zu speichern. Muss vom Workflow-Laufzeitmodul dementsprechend eine zuvor gespeicherte Workflowinstanz wiederhergestellt werden, werden von einem Persistenzdienst bereitgestellte Methoden aufgerufen, um diese Zustandsinformationen zu laden. Anders ausgedrückt wird vom Workflow-Laufzeitmodul bestimmt, wann die Speicherung erfolgen soll, es liegt jedoch in der Verantwortung eines Persistenzdienstes, die erforderlichen Persistenzvorgänge auszuführen.

Ein weiterer Teil des Workflowzustands, der von SqlWorkflowPersistenceService verwaltet wird, sind die Zeitgeberinformationen. Bei jeder Konfiguration einer DelayActivity-Aktivität in der Workflowdefinition und bei jeder Verwendung eines Persistenzdienstes wie dem SqlWorkflowPersistenceService werden die der Aktivität zugeordneten Zeitintervallinformationen als Teil des Workflowzustands beibehalten. Bei jeder Auswertung der Workflowinstanz durch die Workflowlaufzeit werden ausstehende Zeitgeberereignisse verarbeitet.

Erstellen von Persistenzdiensten

Sie können einen Persistenzdienst erstellen, indem Sie eine Klasse von der WorkflowPersistenceService-Klasse ableiten. Sie können den Persistenzdienst dem Workflow-Laufzeitmodul hinzufügen, indem Sie AddService aufrufen oder einen entsprechenden Eintrag in die Anwendungskonfigurationsdatei aufnehmen. Von Windows Workflow Foundation wird die SqlWorkflowPersistenceService-Klasse bereitgestellt. Diesen vordefinierten Persistenzdienst können Sie sofort verwenden oder erweitern. Weitere Informationen zum Erstellen eines benutzerdefinierten Persistenzdiensts finden Sie unter Erstellen benutzerdefinierter Persistenzdienste. Weitere Informationen zur Verwendung der SqlWorkflowPersistenceService-Eigenschaft finden Sie unter Verwenden von SqlWorkflowPersistenceService.

Hinweis

.WorkflowRuntime darf nur einen Persistenzdienst enthalten.

Sperren von Workflowzustandsinformationen

Das Workflow-Laufzeitmodul verfügt über eine Semantik zum Sperren von Workflowzustandsinformationen. Diese Semantik kann in Umgebungen verwendet werden, in denen in verschiedenen Prozessen ausgeführte Persistenzdienste möglicherweise über Zugriff auf einen einzigen Datenspeicher verfügen. Von der WorkflowPersistenceService-Klasse kann diese Funktionalität des Workflow-Laufzeitmoduls unterstützt werden. Dazu wird für SaveWorkflowInstanceState ein Parameter bereitgestellt, von dem angegeben wird, ob die Zustandsinformationen einer Workflowinstanz im Datenspeicher entsperrt werden sollen. Außerdem wird eine UnlockWorkflowInstanceState-Methode zum Entsperren von gesperrten Workflowzustandsinformationen bereitgestellt. Bei einem Persistenzdienst, von dem das Sperren implementiert wird, sollten durch einen Aufruf von LoadWorkflowInstanceState die Zustandsinformationen für eine Workflowinstanz gesperrt werden.

Lösen Sie beim Erstellen eines eigenen Persistenzdienstes eine PersistenceException aus, falls vom Dienst keine Zustandsinformationen in seinen Datenspeicher gespeichert oder Zustandsinformationen aus dem Datenspeicher geladen werden. Vom Workflow-Laufzeitmodul wird dieses Verhalten vorausgesetzt.

Batchverarbeitungsverhalten des Persistenzdienstes

Ein Batchverarbeitungsmechanismus wird für Dienste bereitgestellt, die einen permanenten Speicher zum Speichern von Workflowzustandsinformationen verwenden. In diesen Fällen ist es wichtig, dass der vom Persistenzdienst verwendete permanente Speicher und der interne Zustand des Workflow-Laufzeitmoduls konsistent bleiben. Dem Dienst können Funktionen hinzugefügt werden, die anhand der IPendingWork-Schnittstelle definiert werden. Sie können dann auch die Batchverarbeitung für Workflowtransaktionen verwenden, die vom WorkflowCommitWorkBatchService-Dienst bereitgestellt wird, indem Sie Änderungen am Datenspeicher WorkBatch als Arbeitsaufgabe hinzufügen. Weitere Informationen finden Sie unter SaveCompletedContextActivity und SaveWorkflowInstanceState.

Komplexe Hostingszenarien

Ein mögliches Szenario für den Einsatz von Windows Workflow Foundation-Lösungen ist das Erstellen von mehreren Hostanwendungen mit unterschiedlichen Reihen von Diensten, die auf verschiedenen Desktop- und Serverkonfigurationen ausgeführt werden. In einem derartigen Szenario tritt möglicherweise die Anforderung auf, dass einige in der Lösung definierte Workflows nur auf bestimmten Systemen ausgeführt werden können. Von den vordefinierten Diensten in Windows Workflow Foundation, wie z. B. vom SqlWorkflowPersistenceService-Dienst, wird diese Art der Konfiguration nicht unterstützt. Zur Steuerung, welche Workflowinstanzen auf welchen Systemen geladen werden, muss ein benutzerdefinierter Persistenzdienst erstellt werden. Weitere Informationen finden Sie unter Erstellen benutzerdefinierter Persistenzdienste.

Siehe auch

Referenz

SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch

Konzepte

Verwenden von SqlWorkflowPersistenceService
Erstellen benutzerdefinierter Persistenzdienste

Weitere Ressourcen

Windows Workflow Foundation-Dienste
Übung 4: Verwenden von Laufzeitdiensten
Using Persistence Services

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.