このトピックの内容は、Windows Workflow Foundation 4 に該当します。
このサンプルは、TransactionScope インスタンスを入れ子にする方法を示す 4 つのシナリオで構成されています。1 つ目のシナリオは、作成者には構造がわからないサードパーティのアクティビティを入れ子にする方法を示しています。2 つ目と 3 つ目のシナリオは、タイムアウトがどのように機能するかを示しています。4 つ目のシナリオは、AbortInstanceOnTransactionFailure の設定を示しています。
TransactionScopeActivity の入れ子
1 つ目のシナリオのワークフローは、2 つの WriteLine アクティビティと 1 つの TransactionScope のシーケンスで構成されています。TransactionScope の本体は、2 つの WriteLine アクティビティ、トランザクションのローカル識別子を出力するカスタム アクティビティ、およびサードパーティのアクティビティのシーケンスです。サードパーティのアクティビティである TransactionScopeTest
には TransactionScope が含まれていますが、ワークフローの作成者にはわかりません。このシナリオは、TransactionScope アクティビティを入れ子にできることを示しています。
タイムアウト
2 つ目のシナリオのワークフローは 1 つ目のシナリオとほとんど同じですが、TransactionScopeTest
が TransactionScope に置き換えられています。この TransactionScope の本体は 5 秒の遅延で、トランザクションのタイムアウトは 2 秒に設定されています。外側の TransactionScope のタイムアウトは 10 秒に設定されています。スコープで最も小さいタイムアウト値が適用されるため、トランザクションがタイムアウトします。
3 つ目のシナリオのワークフローは 2 つ目のシナリオとほとんど同じですが、遅延アクティビティが内側の TransactionScope の本体からその直後 (外側の TransactionScope の本体) に移動されています。この場合もトランザクションがタイムアウトしますが、内側の TransactionScope の 2 秒のタイムアウトはもう適用されないため、トランザクションは 10 秒後 (外側の TransactionScope のタイムアウト期間が経過したとき) にタイムアウトします。
トランザクション エラーによる中止
このワークフローは 3 つ目のシナリオに似ていますが、タイムアウトが AbortInstanceOnTransactionFailure プロパティに置き換えられています。内側にあるすべての子は、フラグが設定されている場合、フラグが外側の TransactionScope と一致している必要がありますが、このシナリオでは一致していないため、ワークフローを開くと例外がスローされます。
サンプルを実行するには
Visual Studio 2010 で NestedTransactionScopeActivitySample.sln ソリューションを開きます。
ソリューションをビルドするには、F6 キーを押すか、[ビルド] メニューの [ソリューションのビルド] をクリックします。
ビルドが完了したら、F5 キーを押すか、[デバッグ] メニューの [デバッグ開始] をクリックします。または、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\Basic\Transactions\NestedTransactionScope
|