다음을 통해 공유


컨텍스트 교환

이 항목은 Windows Workflow Foundation 4에 적용됩니다.

컨텍스트 상관 관계는 .NET Context Exchange Protocol Specification에서 설명하는 컨텍스트 교환 메커니즘을 기반으로 합니다. 컨텍스트 상관 관계는 잘 알려진 컨텍스트 헤더나 쿠키를 사용하여 메시지를 올바른 인스턴스와 연결합니다. 컨텍스트 상관 관계를 사용하려면 WorkflowServiceHost에 제공된 끝점에서 BasicHttpContextBinding, WSHttpContextBinding 또는 NetTcpContextBinding 같은 컨텍스트 기반 바인딩을 사용해야 합니다. 이 항목에서는 워크플로 서비스의 메시징 작업에 컨텍스트 상관 관계를 사용하는 방법에 대해 설명합니다.

컨텍스트 상관 관계 사용

컨텍스트 상관 관계는 클라이언트가 컨텍스트 바인딩 중 하나를 사용하여 호스팅되는 워크플로 서비스를 반복하여 호출해야 하는 경우 사용됩니다. 이 형식의 상관 관계는 워크플로 서비스의 Receive/SendReply 쌍에 의해 초기화됩니다. 컨텍스트는 회신을 통해 클라이언트로 다시 전송됩니다. 그러면 클라이언트는 이 컨텍스트를 서비스에 대한 후속 호출에 연결합니다.

워크플로 서비스에서 컨텍스트 상관 관계 구성

컨텍스트 상관 관계는 초기 들어오는 메시지에 회신하는 SendReply 작업과 연결된 ContextCorrelationInitializer를 사용하여 초기화됩니다. 다음 예제에서는 SendReply가 컨텍스트 상관 관계를 초기화하도록 구성됩니다.

Variable<string> Item = new Variable<string>();
Variable<CorrelationHandle> OrderHandle = new Variable<CorrelationHandle>();

Receive StartOrder = new Receive
{
    CanCreateInstance = true,
    ServiceContractName = "IOrderService",
    OperationName = "StartOrder"
};

SendReply ReplyToStartOrder = new SendReply
{
    Request = StartOrder,
    CorrelationInitializers =
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = OrderHandle
        }
    }
};
Ee358724.note(ko-kr,VS.100).gif참고:
Receive/SendReply 쌍은 WorkflowServiceHost의 암시적 CorrelationHandle 관리에 의해 제공되는 기본 요청-회신 상관 관계를 사용합니다. 자세한 내용은 다음 항목을 참조하십시오. 요청-회신.

워크플로 서비스의 후속 Receive 작업은 이전 예제에서 SendReply에 의해 초기화된 CorrelationHandle을 참조할 수 있습니다.

Receive AddItem = new Receive
{
    ServiceContractName = "IOrderService",
    OperationName = "AddItem",
    CorrelatesWith = OrderHandle
};

그러면 끝점이 WorkflowServiceHost에서 BasicHttpContextBinding 같은 컨텍스트 기반 바인딩을 사용하도록 구성됩니다.

<endpoint
  contract=”IOrderContract”
  binding = “basicHttpContextBinding”
  address=”https://localhost:8080/OrderService” />

워크플로 클라이언트에서 컨텍스트 상관 관계 구성

클라이언트도 워크플로이면 클라이언트에서도 컨텍스트 상관 관계를 구성해야 합니다. 클라이언트 워크플로에서 워크플로 서비스를 초기 호출하는 Send/ReceiveReply 쌍의 ReceiveReplyContextCorrelationInitializer를 사용하여 구성해야 합니다.

Variable<CorrelationHandle> cchandle = new Variable<CorrelationHandle>();
Send request = new Send
{
    // Activity configuration omitted.
};

ReceiveReply reply = new ReceiveReply
{
    Request = request,
    CorrelationInitializers = 
    {
        new ContextCorrelationInitializer
        {
            CorrelationHandle = cchandle
        }
    }
};

상관 관계가 초기화되면 후속 Send 작업에서 CorrelationHandle을 사용하여 동일한 서비스 인스턴스에 대한 메서드를 호출할 수 있습니다.

Send request2 = new Send
{
    CorrelatesWith = cchandle,
    // Remaining activity configuration omitted.
};

위에 나온 예제들에서는 컨텍스트 상관 관계가 명시적으로 구성되었습니다. 클라이언트 워크플로도 WorkflowServiceHost에서 호스팅되지 않는 경우 해당 작업이 CorrelationScope 작업 내에 포함되어 있지 않으면 상관 관계를 명시적으로 구성해야 합니다.

워크플로 서비스를 호출하는 클라이언트가 워크플로가 아닌 경우 해당 클라이언트가 첫 번째 호출에서 반환되는 컨텍스트를 워크플로 서비스에 명시적으로 다시 전달한다면 워크플로 서비스를 반복하여 호출할 수 있습니다. Visual Studio 2010에서 서비스 참조를 추가하여 생성된 프록시는 기본적으로 이 컨텍스트를 저장하고 전달합니다.