Ausführen eines Workflows in einem imperativen TransactionScope
Dieses Thema gilt für Windows Workflow Foundation 4.
In diesem Beispiel wird gezeigt, wie ein Workflow mit WorkflowInvoker unter einer Transaction von imperativem C#-Code ausgeführt wird.
Beispieldetails
In imperativem C#-Code wird der TransactionScope verwendet, um einen Satz von Aufgaben zu kapseln, die unter der gleichen Transaktion ausgeführt werden. Der TransactionScope funktioniert, indem er eine Ambient-Transaktion erstellt und die Current-Eigenschaft initialisiert, auf die dann von beliebigen Aufgaben zugegriffen werden kann, die in diesem Thread ausgeführt werden.
Um ein entsprechendes Verhalten im Workflow zu erhalten, muss die Laufzeit die zusätzliche Aufgabe des Initialisierens der Current übernehmen, bevor die einzelnen Aktivitäten ausgeführt werden, da ein Workflow keine Threadaffinität zwischen Aktivitäten aufrechterhält. Mit dieser Laufzeitunterstützung ist das resultierende Verhalten, dass alle Aktivitäten garantiert unter dem Kontext der Ambient-Transaktion ausgeführt werden, der vom TransactionScope erstellt wird, wenn ein Workflow mit WorkflowInvoker innerhalb eines TransactionScope ausgeführt wird.
Ein Workflow kann nur eine einzelne Ambient-Transaktion für jede Workflowinstanz aufweisen; geschachtelte Transaktionen sind nicht verfügbar. Auch wenn der Workflow eine TransactionScope-Aktivität enthält, wird dadurch keine neue innere Transaktion erstellt. Stattdessen wird dadurch die Ambient-Transaktion wiederverwendet, die außerhalb des Workflows erstellt wurde.
Das Beispiel beginnt einen neuen TransactionScope, druckt die Transaktions-ID und beginnt mit WorkflowInvoker einen Workflow. Der Workflow druckt die Transaktions-ID erneut und zeigt an, dass es sich um die gleiche Transaktion handelt, führt dann einen TransactionScope aus, und wird dann beendet. Der Invoke-Anruf bei WorkflowInvoker ist synchron, damit der ursprüngliche Thread blockiert wird, bis der Workflow abgeschlossen ist. Sobald der Workflow vollständig ist, wird die Transaktion abgeschlossen und Ressourcen werden freigegeben.
So verwenden Sie dieses Beispiel
Öffnen Sie mit Visual Studio 2010 die Projektmappendatei "ImperativeTransactionSample.sln".
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie F5, um die Projektmappe auszuführen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<InstallDrive>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Scenario\Transactions\ImperativeTransaction
|