次の方法で共有


命令型 TransactionScope でのワークフローの実行

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

このサンプルでは、命令型 C# コードから TransactionWorkflowInvoker を使用してワークフローを実行する方法を示します。

サンプルの詳細

命令型 C# コードで、TransactionScope を使用して、同じトランザクションで実行される一連の作業をカプセル化します。TransactionScope は、アンビエント トランザクションを作成し、Current プロパティを初期化することによって機能します。初期化後、このプロパティには、そのスレッドで実行されるどの作業からでもアクセスできます。

ワークフローではアクティビティ間でスレッド アフィニティが維持されないため、ワークフローで同等の動作を実現するには、ランタイムで、追加の作業として各アクティビティの実行前に Current を初期化する必要があります。このランタイムによるサポートの結果として、TransactionScope 内で WorkflowInvoker を使用してワークフローを実行するとき、すべてのアクティビティが、TransactionScope によって作成されたアンビエント トランザクションのコンテキストで実行されるようになります。

ワークフローではワークフロー インスタンスごとに 1 つのアンビエント トランザクションしか使用できず、入れ子になったトランザクションは使用できません。ワークフローに TransactionScope アクティビティがある場合でも、新しい内側のトランザクションは作成されません。代わりに、ワークフロー外で作成されたアンビエント トランザクションが再利用されます。

このサンプルでは、新しい TransactionScope を開始し、トランザクション ID を出力して、WorkflowInvoker によってワークフローを開始します。ワークフローではトランザクション ID を再度出力し (これにより、同じトランザクションであることが示されます)、TransactionScope を実行して、完了します。WorkflowInvoker での Invoke の呼び出しは同期的であるので、元のスレッドはワークフローが完了するまでブロックされます。ワークフローが完了すると、トランザクションが完了し、リソースが破棄されます。

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

  1. Visual Studio 2010 を使用して、ImperativeTransactionSample.sln ソリューション ファイルを開きます。

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

  3. ソリューションを実行するには、F5 キーを押します。

Dd759027.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\ImperativeTransaction