次の方法で共有


要求/応答の相関関係

要求/応答の相関関係は、Receive/SendReply のペアと使用すると、ワークフロー サービスに双方向の操作を実装でき、Send/ReceiveReply のペアと使用すると、別の Web サービスの双方向の操作を呼び出すことができます。 WCF サービスの双方向の操作を呼び出す場合、このサービスには、従来の命令型のコード ベースの Windows Communication Foundation (WCF) サービスを使用することも、ワークフロー サービスを使用することもできます。 要求/応答の相関関係を使用するには、BasicHttpBinding などの双方向のバインドを使用する必要があります。 双方向の操作を呼び出す場合と実装する場合では、相関関係の初期化に同様の手順が使用されます。これらの手順については、このセクションで説明します。

Receive/SendReply による双方向の操作での相関関係の使用

Receive/SendReply のペアは、ワークフロー サービスに双方向の操作を実装するために使用されます。 ランタイムは、要求/応答の相関関係を使用して、応答が正しい呼び出し元にディスパッチされるようにします。 ワークフローが WorkflowServiceHost を使用してホストされている場合、つまり、ワークフロー サービスの場合は、既定の相関関係の初期化で十分です。 このシナリオでは、Receive/SendReply のペアがワークフローによって使用されます。特定の相関関係の構成は不要です。

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
// Construct a workflow using StartOrder and ReplyToStartOrder.  

要求/応答の相関関係の明示的な初期化

他の双方向の操作が並列実行される場合、相関関係を明示的に構成する必要があります。 それには、CorrelationHandleRequestReplyCorrelationInitializer を指定するか、CorrelationScope 内に Receive/SendReply を設定します。 この例では、要求/応答の相関関係が Receive/SendReply のペアを使用して構成されています。

Variable<CorrelationHandle> RRHandle = new Variable<CorrelationHandle>();  
  
Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder",  
    CorrelationInitializers =  
    {  
        new RequestReplyCorrelationInitializer  
        {  
            CorrelationHandle = RRHandle  
        }  
    }  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
// Construct a workflow using StartOrder and ReplyToStartOrder.  

相関関係を明示的に構成する代わりに、CorrelationScope アクティビティを使用することもできます。 CorrelationScope は、内包しているメッセージング アクティビティに暗黙の CorrelationHandle を提供します。 この例では、Receive/SendReply ペアが CorrelationScope に内包されています。 明示的な相関関係の構成は不要です。

Receive StartOrder = new Receive  
{  
    CanCreateInstance = true,  
    ServiceContractName = OrderContractName,  
    OperationName = "StartOrder"  
};  
  
SendReply ReplyToStartOrder = new SendReply  
{  
    Request = StartOrder,  
    Content = … // Contains the return value, if any.  
};  
  
CorrelationScope s = new CorrelationScope  
{  
    Body = new Sequence  
    {  
        Activities =
        {  
            StartOrder,  
            // Activities that create the reply.  
            ReplyToStartOrder  
        }  
    }  
};  
  
// Construct a workflow using the CorrelationScope.  

追加の相関関係が必要な場合は、目的の種類の CorrelationInitializers を使用する各メッセージング アクティビティの CorrelationInitializer プロパティを使用して、追加の相関関係を構成します。

Send/ReceiveReply による双方向の操作での相関関係の使用

Receive アクティビティは、WorkflowServiceHost によってホストされるワークフロー サービスでのみ使用できますが、Send および Send/ReceiveReply のペアは、Web サービスに対してメソッドを呼び出す必要のあるすべてのワークフローで使用できます。 ワークフローが WorkflowServiceHost を使用してホストされる場合は、前のセクションで説明した既定の相関関係が適用されますが、そうでない場合は、目的の CorrelationInitializerCorrelationHandle を明示的に使用するか、CorrelationScope による暗黙の処理管理を使用して、相関関係を構成する必要があります。

双方向の操作があるサービスで [サービス参照の追加] を使用する場合は、明示的に指定された要求/応答の相関関係を使用して、内部に Send/ReceiveReply ペア アクティビティをラップするアクティビティが生成されます。