このトピックの内容は、Windows Workflow Foundation 4 に該当します。
このサンプルでは、アンビエント RuntimeTransactionHandle にアクセスしてアンビエント トランザクションを取得し、そのトランザクションを明示的にロールバックするカスタム NativeActivity を作成する方法を示します。
サンプルの詳細
ワークフローでは、最も外側の TransactionScope または TransactedReceiveScope が完了すると、トランザクションは自動的に完了します。未処理の例外がスコープの境界を越えて伝達されると、トランザクションは暗黙的にロールバックします。ただし、例外をスローせずにトランザクションを明示的にロールバックすることが有効な場合もあります。この場合、このサンプルのアクティビティのようなカスタム ロールバック アクティビティを使用して、アンビエント トランザクションを明示的に中止し、必要に応じて例外の理由を提供することができます。
RollbackActivity
は、アンビエント RuntimeTransactionHandle を取得するために実行プロパティにアクセスする必要があるので、NativeActivity になります。Execute
メソッドでは、RuntimeTransactionHandle を取得し、アンビエント ランタイム トランザクションなしでアクティビティが使用されたことを示す null であるかどうかを確認します。次にトランザクションを取得し、null が存在するかどうかを再度確認します。ランタイム トランザクションを初期化せずにアンビエント RuntimeTransactionHandle を取得することができます。最後に、Rollback を呼び出し、ユーザー指定の例外、またはアクティビティによってトランザクションがロールバックされたことを示す汎用的な例外を指定して、トランザクションを中止します。
このサンプルのワークフローは、RollbackActivity
の実行の前後にトランザクションの状態を印刷する本体を持つ TransactionScope で構成されます。トランザクションがロールバックされた場合でも、TransactionScope は完了まで実行され、本体が完了するまでワークフローは中止されないことに注意してください。ワークフローが中止されるのは、AbortInstanceOnTransactionFailure プロパティが既定で true に設定されるためです。
このサンプルを使用するには
Visual Studio 2010 に TransactionRollback.sln ソリューションを読み込みます。
F6 キーを押してソリューションをビルドします。
Ctrl キーを押しながら F5 キーを押してアプリケーションを実行します。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<InstallDrive>:\WF_WCF_Samples
このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。
<InstallDrive>:\WF_WCF_Samples\WF\Scenario\Transactions\TransactionRollback
|