Erstellen benutzerdefinierter Persistenzdienste
Sie implementieren einen Persistenzdienst zum Speichern des Laufzeitzustands einer Workflowinstanz in einen permanenten Speicher und zum Abrufen des Status aus diesem Speicher. An bestimmten Commitpunkten während der Ausführung eines Workflows wird der Persistenzdienst vom Windows Workflow Foundation-Laufzeitmodul benachrichtigt, die Statusinformationen des Workflows beizubehalten. Dies ist z. B. der Fall, wenn der Workflow in den Leerlauf wechselt, wenn eine TransactionScopeActivity-Aktivität nicht mehr ausgeführt wird, oder wenn von der Hostanwendung die Unload-Methode aufgerufen wird.
Vom Windows Workflow Foundation-Laufzeitmodul selbst werden keine Zustandsinformationen beibehalten. Diese Funktion wird von benutzerdefinierten Persistenzdiensten bereitgestellt, die während der Laufzeit dem Modul hinzugefügt werden. Das Laufzeitmodul ist zum Starten der Persistenzvorgänge verantwortlich, die benutzerdefinierten Persistenzdienste sind für das Speichern und Laden beibehaltener Zustandsdaten verantwortlich.
Warnung
Falls Sie einen Workflow erstellen, in dem die TransactionScopeActivity-Aktivität, die CompensatableTransactionScopeActivity-Aktivität, die CompensatableSequenceActivity-Aktivität oder benutzerdefinierte Aktivitäten verwendet werden, für die das PersistOnCloseAttribute-Attribut verwendet oder die ICompensatableActivity-Schnittstelle implementiert wird, muss ein zu verwendender Persistenzdienst angegeben werden. Andernfalls wird beim Ausführen des Workflows eine Ausnahme ausgelöst.
Erstellen eines benutzerdefinierten Persistenzdiensts
Sie erstellen einen benutzerdefinierten Persistenzdienst, indem Sie ihn von der abstrakten Basisklasse WorkflowPersistenceService ableiten. Diese Basisklasse enthält fünf abstrakte Methoden, die Sie überschreiben müssen, wenn Sie den Persistenzdienst erstellen. Diese Methoden werden in der folgenden Tabelle aufgeführt.
Methode | Beschreibung |
---|---|
Lädt den angegebenen abgeschlossenen Projektumfang zurück in den Arbeitsspeicher. |
|
Lädt den angegebenen Zustand der Workflowinstanz zurück in den Arbeitsspeicher. |
|
Speichert den angegebenen abgeschlossenen Projektumfang in einen Datenspeicher. |
|
Speichert den Workflowinstanzzustand in einen Datenspeicher. |
|
Entsperrt den angegebenen Workflowinstanzzustand. |
|
Legt fest, ob die angegebene Workflowinstanz im Speicher beibehalten wird, wenn sie sich eine bestimmte Zeit lang im Leerlauf befindet. |
Ein Beispiel, in dem das Entladen eines Workflows durch das Windows Workflow Foundation-Laufzeitmodul durch Speichern des Workflowinstanzzustands über einen benutzerdefinierten Persistenzdienst veranschaulicht wird, finden Sie unter Custom Persistence Service.
Sperren von Workflowzustandsinformationen
Vom Windows Workflow Foundation-Laufzeitmodul können Workflowzustandsinformationen gesperrt werden, um das Laden eines einzelnen Workflows durch mehrere, in mehreren Vorgängen ausgeführte Persistenzdienste zu vermeiden. Der tatsächliche Sperrmechanismus wird jedoch vom benutzerdefinierten Persistenzdienst selbst implementiert. Dies bedeutet, dass Unterstützung beim Erstellen des Persistenzdiensts optional ist. Falls Sie das Sperren eines Workflowzustands unterstützen möchten, sperren Sie beim Festlegen des Unlock-Parameters auf false den Zugriff auf den Workflowzustand, wenn SaveWorkflowInstanceState und LoadWorkflowInstanceState aufgerufen werden. Die Workflowzustandsinformationen bleiben gesperrt, bis entweder der Unlock-Parameter auf true festgelegt und danach SaveWorkflowInstanceState aufgerufen wird, oder bis die UnlockWorkflowInstanceState-Methode aufgerufen wird. Eine WorkflowOwnershipException sollte ausgelöst werden, wenn von einem Vorgang versucht wird, den Workflowinstanzzustand im gesperrten Zustand zu laden.
Beibehalten von Workflowzustandsinformationen mithilfe von Transaktionen
Falls von einem benutzerdefinierten Persistenzdienst ein permanenter Speicher verwendet wird, verwenden Sie die Batchverarbeitung für Workflowtransaktionen, um das Schreiben der Workflowzustandsinformationen zu verzögern, bis ein Commitpunkt des Workflows erreicht ist. Implementieren Sie dazu die IPendingWork-Schnittstelle in die benutzerdefinierte Persistenzdienstklasse, und fügen Sie eine Arbeitsaufgabe hinzu, die für die anstehenden Änderungen an Ihrem permanenten Speicher an der WorkBatch-Eigenschaft steht.
Siehe auch
Referenz
Konzepte
Übersicht über Persistenz
Windows Workflow-Persistenzdienste
Weitere Ressourcen
Custom Persistence Service
Using Persistence Services
Entwickeln von Windows Workflow Foundation-Diensten
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.