相関関係の概要
相関関係とは、ワークフロー サービス メッセージを互いに関連付ける、最初の要求への応答などのアプリケーションのインスタンス状態と関連付ける、または特定の注文 ID を注文処理ワークフローの永続化された状態に関連付けるためのしくみです。 ここでは、相関関係の概要について説明します。 このセクションの他のトピックでは、相関関係の各種類についての追加情報を提供します。
相関関係の種類
相関関係には、プロトコル ベースとコンテンツ ベースがあります。 プロトコル ベースの相関関係では、メッセージ間のマッピングを提供するためのメッセージ配信インフラストラクチャで提供されるデータが使用されます。 プロトコル ベースの相関関係を使用して関連付けられたメッセージは、メモリ内の RequestContext などのオブジェクトを使用して、またはトランスポート プロトコルで提供されるトークンによって、互いに関連付けられます。 コンテンツ ベースの相関関係では、メッセージが、アプリケーションで指定されたデータを使用して関連付けられます。 コンテンツ ベースの相関関係を使用して関連付けられたメッセージは、アプリケーションが定義する顧客番号などのメッセージ内のデータによって互いに関連付けられます。
相関関係に参加するアクティビティは、CorrelationHandle を使用してメッセージング アクティビティを互いに結び付けます。 たとえば、サービスの呼び出しに使用される Send と、それに続く、サービスからのコールバックの受信に使用される Receive は、同じ CorrelationHandle を共有します。 この基本的なパターンは、相関関係がコンテンツ ベースであっても、プロトコル ベースであっても使用されます。 関連付けハンドルは、各アクティビティに明示的に設定する、またはアクティビティを CorrelationScope アクティビティに格納することができます。 CorrelationScope に格納されたアクティビティには、CorrelationScope が管理する関連付けハンドルがあり、CorrelationHandle を明示的に設定する必要がありません。 CorrelationScope スコープでは、要求/応答の相関関係と、もう 1 つの種類の相関関係のための CorrelationHandle 管理が提供されます。 WorkflowServiceHost を使用してホストされるワークフロー サービスには、CorrelationScope アクティビティと同じ既定の関連付け管理があります。 多くのシナリオで、この既定の関連付け管理は、CorrelationScope 内のメッセージング アクティビティ、またはワークフロー サービスが CorrelationHandle セットを要求しないことを意味します。ただし、2 つの Receive アクティビティが並行している、または 2 つの Send アクティビティに 2 つの Receive アクティビティが続くなど、複数のメッセージング アクティビティが並行または重複している場合を除きます。 既定の相関関係の詳細情報は、このセクションの中のそれぞれの種類の相関関係を説明するトピックに記述されています。 メッセージング アクティビティの詳細については、「メッセージング アクティビティ」と「方法: メッセージング アクティビティを使用してワークフロー サービスを作成する」を参照してください。
プロトコル ベースの相関関係
プロトコル ベースの相関関係では、メッセージを相互に関連付け、該当するインスタンスと関連付けるために、トランスポート機構が使用されます。 システムで提供される一部のプロトコル相関関係には、要求/応答の相関関係とコンテキスト ベースの相関関係が含まれます。 要求/応答の相関関係を使用して、メッセージング アクティビティの 1 つのペアが関連付けられ、Send と ReceiveReply のペアや、Receive と SendReply のペアなどの双方向の操作が形成されます。 また、Visual Studio ワークフロー デザイナーには、このパターンを迅速に実装できるアクティビティ テンプレートのセットが用意されています。 コンテキスト ベースの相関関係は、.NET コンテキスト交換プロトコルの仕様に関するページで説明されているコンテキスト交換メカニズムに基づきます。 コンテキスト ベースの相関関係を使用するには、BasicHttpContextBinding、WSHttpContextBinding、または NetTcpContextBinding などのコンテキスト ベースのバインディングがエンドポイントで使用される必要があります。
プロトコルの相関関係の詳細については、永続的な二重と要求/応答に関するページを参照してください。 Visual Studio ワークフロー デザイナーのアクティビティ テンプレートの使用方法の詳細については、「メッセージング アクティビティ」を参照してください。 サンプル コードについては、「NetContextExchangeCorrelation」のサンプルを参照してください。
コンテンツ ベースの相関関係
コンテンツ ベースの相関関係では、メッセージ内の一部の情報を特定のインスタンスとの関連付けに使用します。 プロトコル ベースの相関関係と異なり、コンテンツ ベースの相関関係では、各関連メッセージ内のこの情報がある場所に、アプリケーションの作成者が明示的に記述されている必要があります。 コンテンツ ベースの相関関係を使用するアクティビティでは、MessageQuerySet を使用して、このメッセージ データを指定します。 コンテンツ ベースの相関関係は、BasicHttpContextBinding などのコンテキスト バインディングの 1 つを使用しないサービスと通信する場合に便利です。