次の方法で共有


相関関係の概要

関連付けとは、最初の要求への応答や特定の注文 ID など、ワークフロー サービス メッセージを互いに関連付けたり、アプリケーション インスタンスの状態を注文処理ワークフローの永続化された状態に関連付けたりするためのメカニズムです。 このトピックでは、相関関係の概要について説明します。 このセクションの他のトピックでは、関連付けの種類ごとに追加情報を提供します。

相関関係の種類

関連付けには、プロトコル ベースまたはコンテンツ ベースを使用できます。 プロトコルベースの相関関係では、メッセージ配信インフラストラクチャによって提供されるデータを使用して、メッセージ間のマッピングを提供します。 プロトコル ベースの相関関係を使用して関連付けられたメッセージは、メモリ内のオブジェクト ( RequestContextなど) を使用して、またはトランスポート プロトコルによって提供されるトークンによって相互に関連付けられます。 コンテンツ ベースの相関関係は、アプリケーション指定のデータを使用してメッセージを相互に関連付けます。 コンテンツ ベースの相関関係を使用して関連付けられたメッセージは、顧客番号など、メッセージ内の一部のアプリケーション定義データによって相互に関連付けられます。

関連付けに参加するアクティビティでは、 CorrelationHandle を使用してメッセージング アクティビティを結び付けます。 たとえば、サービスの呼び出しに使用される Send と、サービスからのコールバックの受信に使用される後続の Receive は、同じ CorrelationHandleを共有します。 この基本的なパターンは、相関関係がコンテンツ ベースであるかプロトコル ベースであるかに関係なく使用されます。 関連付けハンドルは、各アクティビティで明示的に設定することも、アクティビティを CorrelationScope アクティビティに含めることもできます。 CorrelationScopeに含まれるアクティビティには、関連付けハンドルがCorrelationScopeによって管理されており、CorrelationHandleを明示的に設定する必要はありません。 CorrelationScope スコープでは、要求/応答の相関関係と 1 つの追加の関連付けの種類に対するCorrelationHandle管理が提供されます。 WorkflowServiceHostを使用してホストされるワークフロー サービスの既定の関連付け管理は、CorrelationScope アクティビティと同じです。 通常、この既定の関連付け管理は、多くのシナリオでは、2 つのReceive アクティビティ、2 つのSend アクティビティ、2 つのReceive アクティビティなど、複数のメッセージング アクティビティが並列または重複しない限り、CorrelationScopeまたはワークフロー サービスのメッセージング アクティビティにCorrelationHandleセットを必要としないことを意味します。 既定の相関関係の詳細については、このセクションのトピックで、特定の種類の相関関係について説明します。 メッセージング アクティビティの詳細については、「 メッセージング アクティビティ 」および「 方法: メッセージング アクティビティを使用してワークフロー サービスを作成する」を参照してください。

Protocol-Based 関連付け

プロトコル ベースの相関関係では、トランスポート メカニズムを使用して、メッセージを相互に関連付け、適切なインスタンスに関連付けます。 一部のシステム提供プロトコルの相関関係には、要求/応答の相関関係とコンテキストベースの相関関係が含まれます。 要求と応答の相関関係は、メッセージング アクティビティの 1 つのペアを関連付けるために使用され、ReceiveReplyとペアになったSendや、SendReplyとペアになったReceiveなど、双方向の操作を形成します。 Visual Studio ワークフロー デザイナーには、このパターンをすばやく実装するための一連のアクティビティ テンプレートも用意されています。 コンテキスト ベースの相関関係は、「 .NET Context Exchange Protocol Specification」で説明されているコンテキスト交換メカニズムに基づいています。 コンテキスト ベースの関連付けを使用するには、エンドポイントで BasicHttpContextBindingWSHttpContextBindingNetTcpContextBinding などのコンテキスト ベースのバインドを使用する必要があります。

プロトコルの相関関係の詳細については、「 Durable Duplex and Request-Reply」を参照してください。 Visual Studio ワークフロー デザイナー アクティビティ テンプレートの使用方法の詳細については、「 メッセージング アクティビティ」を参照してください。 サンプル コードについては、 NetContextExchangeCorrelation サンプルを 参照してください。

コンテンツ ベースの相関関係

コンテンツ ベースの関連付けでは、メッセージ内の情報の一部を使用して、特定のインスタンスに関連付けます。 プロトコル ベースの関連付けとは異なり、コンテンツ ベースの相関関係では、アプリケーションの作成者は、関連する各メッセージでこのデータが見つかる場所を明示的に指定する必要があります。 コンテンツ ベースの相関関係を使用するアクティビティでは、 MessageQuerySetを使用してこのメッセージ データを指定します。 コンテンツ ベースの相関関係は、 BasicHttpContextBindingなどのコンテキスト バインディングの 1 つを使用しないサービスと通信する場合に便利です。

こちらも参照ください