Gewusst wie: Erstellen eines benutzerdefinierten Persistenzteilnehmers
Dieses Thema gilt für Windows Workflow Foundation 4.
Die folgende Prozedur enthält die Schritte zur Erstellung eines Persistenzteilnehmers. Beispielimplementierungen von Persistenzteilnehmern finden Sie im Beispiel Participating in Persistence und im Thema Erweiterbarkeit des Speichers.
Erstellen Sie eine von der PersistenceParticipant-Klasse oder von der PersistenceIOParticipant-Klasse abgeleitete Klasse. Die PersistenceIOParticipant-Klasse bietet die gleichen Erweiterbarkeitspunkte wie die PersistenceParticipant-Klasse und kann zusätzlich dazu in E/A-Vorgänge eingebunden werden. Führen Sie mindestens einen der folgenden Schritte aus.
Implementieren Sie die CollectValues-Methode. Die CollectValues-Methode verfügt über zwei Wörterbuchparameter, einen zum Speichern von Lese-/Schreibwerten und einen zum Speichern von lesegeschützten Werten (wird später in Abfragen verwendet). In dieser Methode müssen Sie diese Wörterbücher mit Daten auffüllen, die für einen Persistenzteilnehmer spezifisch sind. Jedes Wörterbuch enthält den Namen des Werts als Schlüssel und den Wert selbst als InstanceValue-Objekt.
Die Werte im readWriteValues-Wörterbuch werden als InstanceValue-Objekte gepackt. Die Werte im lesegeschützten Wörterbuch werden als InstanceValue-Objekte gepackt, wobei InstanceValueOptions.Optional und InstanceValueOption.WriteOnly festgelegt sind. Jedes InstanceValue-Objekt, das von den CollectValues-Implementierungen für die einzelnen Persistenzteilnehmer bereitgestellt wird, muss über einen eindeutigen Namen verfügen.
protected virtual void CollectValues (out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues)
Implementieren Sie die MapValues-Methode. Die MapValues-Methode akzeptiert zwei Parameter, die den Parametern für die CollectValues-Methode ähneln. Alle in der CollectValues-Phase gesammelten Werte werden über diese Wörterbuchparameter übergeben. Den lesegeschützten Werten werden die neuen von der MapValues-Phase hinzugefügten Werte hinzugefügt. Jeder von Implementierungen der MapValues-Methode bereitgestellte Wert für alle Persistenzteilnehmer muss über einen eindeutigen Namen verfügen.
protected virtual IDictionary<XName,Object> MapValues (IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues)
Implementieren Sie die PublishValues-Methode. Die PublishValues-Methode empfängt ein Wörterbuch, das alle aus dem Persistenzspeicher geladenen Werte enthält.
protected virtual void PublishValues (IDictionary<XName,Object> readWriteValues)
Implementieren Sie die BeginOnSave-Methode, falls der Teilnehmer ein E/A-Persistenzteilnehmer ist. Diese Methode wird während eines Save-Vorgangs aufgerufen. In dieser Methode müssen Sie zusätzlich zu den Workflowinstanzen für die persistente Speicherung E/A-Vorgänge ausführen. Wenn der Host eine Transaktion für den entsprechenden Persistenzbefehl verwendet, wird die gleiche Transaktion in Transaction.Current bereitgestellt. Darüber hinaus zeigen PersistenceIOParticipants möglicherweise eine Transaktionskonsistenzanforderung an. In diesem Fall erstellt der Host gegebenenfalls eine Transaktion für den Persistenzabschnitt.
protected virtual IAsyncResult BeginOnSave (IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state)
Implementieren Sie die BeginOnLoad-Methode, falls der Teilnehmer ein E/A-Persistenzteilnehmer ist. Diese Methode wird während eines Load-Vorgangs aufgerufen. In dieser Methode müssen Sie zusätzlich zum Laden von Workflowinstanzen E/A-Vorgänge ausführen. Wenn der Host eine Transaktion für den entsprechenden Persistenzbefehl verwendet, wird die gleiche Transaktion in Transaction.Current bereitgestellt. Darüber hinaus zeigen E/A-Persistenzteilnehmer möglicherweise eine Transaktionskonsistenzanforderung an. In diesem Fall erstellt der Host gegebenenfalls eine Transaktion für den Persistenzabschnitt.
protected virtual IAsyncResult BeginOnLoad (IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state)