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

LoadCompletedContextActivity

Lädt den angegebenen abgeschlossenen Projektumfang zurück in den Arbeitsspeicher.

LoadWorkflowInstanceState

Lädt den angegebenen Zustand der Workflowinstanz zurück in den Arbeitsspeicher.

SaveCompletedContextActivity

Speichert den angegebenen abgeschlossenen Projektumfang in einen Datenspeicher.

SaveWorkflowInstanceState

Speichert den Workflowinstanzzustand in einen Datenspeicher.

UnlockWorkflowInstanceState

Entsperrt den angegebenen Workflowinstanzzustand.

UnloadOnIdle

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

WorkflowPersistenceService

Konzepte

Übersicht über Persistenz
Windows Workflow-Persistenzdienste

Weitere Ressourcen

Custom Persistence Service
Using Persistence Services
Entwickeln von Windows Workflow Foundation-Diensten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.