次の方法で共有


トランザクション キュー

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

このサンプルでは、キューとトランザクションを Windows Workflow Foundation (WF) に統合し、信頼性があり、拡張性の高いサービスを作成する方法を示します。TransactionScope は、NetMsmqBinding を使用してトランザクション内でキューにメッセージを送信するためにクライアント ワークフローで使用されます。TransactedReceiveScope は、キューからメッセージを受信して同じトランザクション内でワークフローの状態を更新するためにサーバーで使用されます。

使用例

TransactionScopeTransactedReceiveScopeNetMsmqBindingReceive、およびコンテンツ ベースの相関関係。

説明

このサンプルで取り上げる機能について説明するために、特定のアカウント用に取得されて使用されるポイントを追跡する RewardsPoints ワークフロー サービスが作成されます。クライアントは、WorkflowInvoker を使用してキューへのさまざまな要求の送信をシミュレートします。トランザクション内でキューにメッセージを送信するために、Send アクティビティを TransactionScopeBody 内に配置できます。このサンプルでは、キューに置かれたメッセージがクライアント アプリケーションとサーバー アプリケーションを切り離す方法について説明するために、最初にクライアントが実行され、次にサーバーが実行されます。

クライアントが完了したら、サービスが構成されてホストされます。サービスが開くとすぐに、既にキューに置かれているメッセージの処理が開始されます。各メッセージが同じサーバー トランザクション内で受信および処理されます。このサンプルでは、最初に受信するメッセージは、要求メッセージの一部として渡されるアカウント名に基づいてインスタンスを作成してコンテンツ ベースの相関関係を初期化する CreateAccount 要求です。実際に必要となる可能性のある種類のサービスをモデル化するために、AddPoints メッセージと UsePoints メッセージを処理する次の 2 つの TransactedReceiveScope アクティビティが while ループ内の並行分岐に配置されており、これらのメッセージを任意の順序で繰り返し処理できるようになっています。

TransactionScope および TransactedReceiveScope は、それぞれスコープの末尾に暗黙的な永続化ポイントを持つので、これらのアクティビティをキューと組み合わせて WF で使用すると、メッセージが失われないようにしながら、ワークフローを一貫性のある状態から次の一貫性のある状態に確実に移行できます。

サンプルを設定、ビルド、および実行するには

  1. MSMQ をインストールして構成します。詳細については、「メッセージ キュー (MSMQ) のインストール」を参照してください。

  2. コマンド ラインで net start msdtc コマンドを実行して、MSDTC が実行されていることを確認します。

  3. プロジェクトをコンパイルして実行可能ファイルを開くか、Visual Studio 2010 でプロジェクトを開いてデバッグ メニューから開始オプションを選択します。最初にキューが作成され、次にクライアントが実行されてキューにメッセージが送信され、最後にサービスが開始されてメッセージが処理されます。プログラムを終了するには、Enter キーを押します。

Ee835855.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\TransactedQueues