다음을 통해 공유


Request-Reply 상관 관계

요청-회신 상관 관계는 Receive/SendReply 한 쌍을 사용하여 워크플로 서비스에서 양방향 작업을 구현하며, Send/ReceiveReply 다른 쌍을 사용하여 다른 웹 서비스에서 양방향 작업을 호출합니다. WCF 서비스에서 양방향 작업을 호출할 때 서비스는 기존의 명령적 코드 기반 WCF(Windows Communication Foundation) 서비스이거나 워크플로 서비스일 수 있습니다. 요청-회신 상관 관계를 사용하려면 다음과 같은 BasicHttpBinding양방향 바인딩을 사용해야 합니다. 양방향 작업을 호출하거나 구현하든 상관 관계 초기화 단계는 유사하며 이 섹션에서 설명합니다.

Receive/SendReply를 사용하여 Two-Way 작업에서 상관 관계 사용

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.  

Request-Reply 상관관계 명시적으로 초기화

다른 양방향 작업이 병렬인 경우 상관 관계를 명시적으로 구성해야 합니다. 이 작업은 CorrelationHandleRequestReplyCorrelationInitializer를 지정하거나 Receive 내부에 /SendReplyCorrelationScope를 배치하여 수행할 수 있습니다. 이 예제에서는 요청-회신 상관 관계가 쌍에 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를 사용하여 Two-Way 작업에서 상관 관계 사용

Receive 활동은 WorkflowServiceHost에서 호스트되는 워크플로 서비스에서만 사용할 수 있지만, SendSend/ 쌍은 웹 서비스에서 메서드를 호출해야 하는 모든 워크플로에서 사용할 수 있습니다. WorkflowServiceHost를 사용하여 워크플로가 호스팅되는 경우, 이전 섹션에서 설명한 기본 상관 관계가 적용됩니다. 하지만 그렇지 않은 경우에는 원하는 CorrelationInitializerCorrelationHandle를 사용하여 명시적으로 또는 CorrelationScope의 암시적 핸들 관리 기능을 사용하여 상관 관계를 구성해야 합니다.

양방향 작업이 있는 서비스에서 서비스 참조 추가 를 사용하는 경우 요청/회신 상관 관계가 명시적으로 지정된 쌍 작업을 내부적으로 래핑 Send/ReceiveReply 하는 작업이 생성됩니다.