SuppressTransactionScope-Aktivität
Dieses Thema gilt für Windows Workflow Foundation 4.
Anhand dieses Beispiels wird veranschaulicht, wie eine benutzerdefinierte SuppressTransactionScope
-Aktivität erstellt wird, um die Ambient-Laufzeittransaktion zu unterdrücken, falls vorhanden.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\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\SuppressTransactionScope
|
Beispieldetails
Die benutzerdefinierte Aktivität ist nützlich, um den Fluss einer Transaktion an einen anderen Dienst zu verhindern, wenn der Transaktionsfluss in einer bestimmten Situation unerwünscht ist. Die Workflowlaufzeit verfügt über integrierte Unterstützung zur Unterdrückung der Ambient-Transaktion in der NativeActivity-Klasse, zur Verwendung dieser Unterstützung muss jedoch eine benutzerdefinierte NativeActivity erstellt werden wie in diesem Beispiel.
Das Szenario besteht aus drei Teilen. Zuerst erstellt ein TransactionScope eine Laufzeittransaktion, die zur Ambient-Transaktion wird. Dies wird mit einer benutzerdefinierten Aktivität überprüft, die die lokalen und verteilten Bezeichner der Transaktion ausgibt. Die Transaktion wird dann an einen Remotedienst weitergegeben. Im zweiten Teil gibt der Workflow innerhalb eines SuppressTransactionScope
die Transaktionsbezeichner erneut aus und die Transaktion erneut weiter. Die benutzerdefinierte Aktivität findet jedoch keine Ambient-Transaktion, und die an den Dienst weitergegebene Meldung enthält die Transaktion nicht. Daraufhin erstellt der Dienst eine Transaktion, sodass die auf dem Client und für den Dienst ausgegebenen verteilten Bezeichner nicht übereinstimmen. Im dritten und letzten Teil nach dem Beenden des SuppressTransactionScope
wird die Laufzeittransaktion erneut zur Ambient-Transaktion, was durch eine weitere Meldung an den Dienst mit einem verteilten Bezeichner überprüft wird, der mit dem Bezeichner in der ersten Meldung übereinstimmt.
Die Aktivität selbst wird von NativeActivity abgeleitet, da sie eine untergeordnete Aktivität planen und eine Ausführungseigenschaft hinzufügen muss. Der SuppressTransactionScope
weist eine Variable vom Typ RuntimeTransactionHandle auf, die statt eines Instanzfelds vom Typ RuntimeTransactionHandle verwendet werden muss, da das Handle initialisiert werden muss. Das Variable<RuntimeTransactionHandle>
wird den Metadaten der Aktivität als Implementierungsvariable hinzugefügt, da es nur intern verwendet wird.
Bei Ausführung prüft die Aktivität zunächst, ob ein Textkörper angegeben wurde. Wenn dies der Fall ist, wird die SuppressTransaction
-Eigenschaft für das RuntimeTransactionHandle festgelegt. Nach Festlegen der Eigenschaft wird diese den Ausführungseigenschaften hinzugefügt und wird zur Ambient-Eigenschaft. Dies bedeutet, dass die Eigenschaft für jede dem SuppressTransactionScope
untergeordnete Aktivität sichtbar ist, sodass die Unterdrückung der Laufzeittransaktion erzwungen wird und ein geschachtelter TransactionScope eine Ausnahme auslöst. Nach Hinzufügen des Handles zu den Ausführungseigenschaften wird die Ausführung des Textkörpers geplant.
So verwenden Sie dieses Beispiel
Öffnen Sie die Projektmappe "SuppressTransactionScope.sln" in Visual Studio 2010.
Um die Projektmappe zu erstellen, drücken Sie F6, oder wählen Sie Projektmappe erstellen im Menü Erstellen aus.
Sobald die Erstellung erfolgreich war, klicken Sie mit der rechten Maustaste auf die Projektmappe, und wählen Sie Startprojekte festlegen aus. Wählen Sie im Dialogfeld Mehrere Startprojekte, und stellen Sie sicher, dass die Aktion für beide Projekte Starten ist.
Drücken Sie F5, oder wählen Sie im Menü Debuggen die Option Debugging starten. Zur Ausführung ohne Debugging drücken Sie STRG+F5 oder wählen Starten ohne Debugging im Menü Debuggen.
Hinweis: Der Server muss vor dem Starten des Clients ausgeführt werden. Die Ausgabe im Konsolenfenster, das den Dienst hostet, gibt an, wenn dieser gestartet wird.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\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\SuppressTransactionScope
|