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:
Wenn unteilbare Transaktionen in TransactionScopeActivity-Aktivitäten und CompensatableTransactionScopeActivity-Aktivitäten abgeschlossen werden.
Wenn sich eine Workflowinstanz im Leerlauf befindet und das UnloadOnIdle-Kennzeichen für WorkflowPersistenceService auf true festgelegt wird. Dies tritt z. B. bei Verwendung einer DelayActivity-Aktivität auf.
Wenn von der Laufzeithostanwendung auf der Workflowinstanz System.Workflow.Runtime.WorkflowInstance.Unload oder System.Workflow.Runtime.WorkflowInstance.TryUnload aufgerufen wird.
Wenn eine Workflowinstanz beendet oder fertig gestellt wird.
Wenn eine benutzerdefinierte Aktivität mithilfe des PersistOnCloseAttribute-Attributs fertig gestellt wird.
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
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.