Freigeben über


Verwenden von DefaultWorkflowCommitWorkBatchService

Der Zweck des DefaultWorkflowCommitWorkBatchService-Diensts besteht im Aktivieren benutzerdefinierter Logik für das Ausführen von Commits für Arbeitsbatches (auch als Persistenzpunkte bezeichnet). Beim Ausführen eines Commits für einen Arbeitsbatch ruft die Workflowlaufzeit den DefaultWorkflowCommitWorkBatchService-Dienst auf und weist ihm einen Delegaten zu, durch den der Aufruf für das eigentliche Ausführen des Commits für den Arbeitsbatch erfolgt. Die Laufzeit muss noch den Commit ausführen, doch dem Dienst wird gestattet, sich für Commitanpassungen in den Prozess einzuschalten. 

Die einzige wirkliche Anforderung des DefaultWorkflowCommitWorkBatchService-Diensts besteht im Erstellen einer Transaktion, sofern beim Aufruf der CommitWorkBatch-Methode noch keine Transaktion vorhanden ist. Ist keine Transaktion vorhanden (dies ist der Fall, wenn die Current-Eigenschaft null zurückgibt), muss von DefaultWorkflowCommitWorkBatchService eine Transaktion erstellt und die Ambient-Transaktion festgelegt werden, bevor der CommitWorkBatchCallback-Delegat aufgerufen wird. Dies erfolgt durch Einbinden des Delegataufrufs mit TransactionScope.

Der hauptsächliche Verwendungszweck für diesen Diensttyp besteht in der Aktivierung der benutzerdefinierten Fehlerbehandlungslogik. Ist der DefaultWorkflowCommitWorkBatchService-Dienst im Besitz der Transaktion, da eine Transaktion erstellt wurde, wenn Current den Wert null zurückgibt (Nothing in Visual Basic), kann der Delegat mehr als einmal aufgerufen und eine neue Transaktion für jeden Aufruf erstellt werden. Das häufigste Beispiel hierfür ist die Behandlung zeitweiliger Netzwerkprobleme oder SQL-Clusterfailover. Wenn der Aufruf von CommitWorkBatchCallback eine Ausnahme auslöst, kann WorkflowCommitWorkBatchService diese Ausnahme abfangen, eine neue Transaktion starten und den Delegaten erneut aufrufen. Dadurch können Workflowinstanzen weiterhin ausgeführt werden, die andernfalls beendet worden wären.

Hinweis

Ein WorkflowCommitWorkBatchService-Dienst kann nur den Commit wiederholen, wenn von diesem die aktuelle umgebende Transaktion erstellt wurde. Ist beim Aufruf der CommitWorkBatch-Methode durch die Laufzeit bereits eine Ambient-Transaktion vorhanden, bedeutet dies, dass ein anderes Objekt im Besitz der Transaktion ist und in deren Rahmen möglicherweise bereits Arbeit ausgeführt wurde. Da der DefaultWorkflowCommitWorkBatchService-Dienst die externe Arbeit nicht reproduzieren kann, ist sie für das erneute Ausführen des Commits nicht gültig. Ein Beispiel dafür ist eine TransactionScopeActivity-Transaktion oder eine Transaktion, die vom Hostcode erstellt wurde, bevor die Unload-Methode aufgerufen wird.

Siehe auch

Referenz

WorkflowCommitWorkBatchService
DefaultWorkflowCommitWorkBatchService

Konzepte

Erstellen von benutzerdefinierten WorkflowCommitWorkBatchService-Diensten
Gewusst wie: Hinzufügen und Entfernen von Workflowdiensten
Übersicht über Dienste
Windows Workflow CommitWorkBatch-Dienste

Weitere Ressourcen

Using Transaction Services Sample
Entwickeln von Windows Workflow Foundation-Diensten

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.