次の方法で共有


トランザクションのロールバック

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

このサンプルでは、アンビエント RuntimeTransactionHandle にアクセスしてアンビエント トランザクションを取得し、そのトランザクションを明示的にロールバックするカスタム NativeActivity を作成する方法を示します。

サンプルの詳細

ワークフローでは、最も外側の TransactionScope または TransactedReceiveScope が完了すると、トランザクションは自動的に完了します。未処理の例外がスコープの境界を越えて伝達されると、トランザクションは暗黙的にロールバックします。ただし、例外をスローせずにトランザクションを明示的にロールバックすることが有効な場合もあります。この場合、このサンプルのアクティビティのようなカスタム ロールバック アクティビティを使用して、アンビエント トランザクションを明示的に中止し、必要に応じて例外の理由を提供することができます。

RollbackActivity は、アンビエント RuntimeTransactionHandle を取得するために実行プロパティにアクセスする必要があるので、NativeActivity になります。Execute メソッドでは、RuntimeTransactionHandle を取得し、アンビエント ランタイム トランザクションなしでアクティビティが使用されたことを示す null であるかどうかを確認します。次にトランザクションを取得し、null が存在するかどうかを再度確認します。ランタイム トランザクションを初期化せずにアンビエント RuntimeTransactionHandle を取得することができます。最後に、Rollback を呼び出し、ユーザー指定の例外、またはアクティビティによってトランザクションがロールバックされたことを示す汎用的な例外を指定して、トランザクションを中止します。

このサンプルのワークフローは、RollbackActivity の実行の前後にトランザクションの状態を印刷する本体を持つ TransactionScope で構成されます。トランザクションがロールバックされた場合でも、TransactionScope は完了まで実行され、本体が完了するまでワークフローは中止されないことに注意してください。ワークフローが中止されるのは、AbortInstanceOnTransactionFailure プロパティが既定で true に設定されるためです。

このサンプルを使用するには

  1. Visual Studio 2010 に TransactionRollback.sln ソリューションを読み込みます。

  2. F6 キーを押してソリューションをビルドします。

  3. Ctrl キーを押しながら F5 キーを押してアプリケーションを実行します。

Ee656553.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<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

参照

概念

ワークフロー トランザクション