상관 관계 개요
상관 관계는 워크플로 서비스 메시지를 서로 연결하거나 애플리케이션 상태와 연결하는 메커니즘입니다. 예를 들어 응답을 초기 요청과 연결하거나 특정 주문 ID를 주문 처리 워크플로의 지속된 상태와 연결할 수 있습니다. 이 항목에서는 상관 관계에 대해 간략하게 설명하고 이 단원의 다른 항목에서는 각 상관 관계 형식에 대해 자세히 설명합니다.
상관 관계 형식
상관 관계는 프로토콜 기반 또는 내용 기반일 수 있습니다. 프로토콜 기반 상관 관계는 메시지 배달 인프라에서 제공하는 데이터를 사용하여 메시지 간의 매핑을 제공합니다. 프로토콜 기반 상관 관계를 사용하여 상호 관련된 메시지는 메모리에 있는 개체(예: RequestContext)를 사용하거나 전송 프로토콜에서 제공하는 토큰에 의해 서로 연결됩니다. 내용 기반 상관 관계는 애플리케이션에서 지정한 데이터를 사용하여 메시지를 서로 연결합니다. 내용 기반 상관 관계를 사용하여 상호 관련된 메시지는 해당 메시지에 있는 일부 애플리케이션 정의 데이터(예: 고객 번호)를 사용하여 서로 연결됩니다.
상관 관계에 참여하는 작업은 CorrelationHandle을 사용하여 메시징 작업을 서로 연결합니다. 예를 들어 서비스를 호출하는 데 사용되는 Send와 서비스로부터 콜백을 받은 데 사용되는 후속 Receive는 동일한 CorrelationHandle을 공유합니다. 이 기본 패턴은 내용 기반 상관 관계와 프로토콜 상관 관계에서 모두 사용됩니다. 즉, 각 작업에 상관 관계 핸들을 명시적으로 설정하거나 CorrelationScope 작업에 작업을 포함할 수 있습니다. CorrelationScope에 포함된 작업은 CorrelationScope를 통해 해당 상관 관계 핸들을 관리하기 때문에 CorrelationHandle을 명시적으로 설정할 필요가 없습니다. CorrelationScope 범위는 요청-회신 상관 관계 및 하나의 추가 상관 관계 형식에 CorrelationHandle 관리를 제공합니다. WorkflowServiceHost를 사용하여 호스트된 워크플로 서비스는 CorrelationScope 작업과 동일한 기본 상관 관계 관리를 사용합니다. 일반적으로 이 기본 상관 관계 관리는 두 개의 CorrelationScope 작업이 나란히 있거나 두 개의 CorrelationHandle 작업 뒤에 두 개의 Receive 작업이 있는 것과 같이 여러 메시징 작업이 나란히 있거나 겹치지 않는 한 대부분의 경우에 Send 또는 워크플로 서비스의 메시징 작업에 해당 Receive 집합이 필요 없음을 의미합니다. 기본 상관 관계는 이 단원에서 각 상관 관계 형식에 대해 설명하는 항목에서 자세히 설명합니다. 메시징 활동에 대한 자세한 내용은 메시징 활동 및 방법: 메시징 활동을 사용하여 워크플로 서비스 만들기를 참조하세요.
프로토콜 기반 상관 관계
프로토콜 기반 상관 관계는 전송 메커니즘을 사용하여 메시지를 서로 연결하거나 적절한 인스턴스와 연결합니다. 일부 시스템 제공 프로토콜 상관 관계에는 요청-회신 상관 관계와 컨텍스트 기반 상관 관계가 포함됩니다. 요청-회신 상관 관계는 Send와 쌍을 이루는 ReceiveReply 또는 Receive와 쌍을 이루는 SendReply처럼 한 쌍의 메시징 작업을 상호 연결하여 양방향 작업을 만드는 데 사용됩니다. Visual Studio Workflow Designer에서는 이러한 패턴을 빠르게 구현할 수 있도록 작업 템플릿 집합도 제공합니다. 컨텍스트 기반 상관 관계는 .NET 컨텍스트 교환 프로토콜 사양에서 설명하는 컨텍스트 교환 메커니즘을 기준으로 합니다. 컨텍스트 상관 관계를 사용하려면 엔드포인트에서 BasicHttpContextBinding, WSHttpContextBinding 또는 NetTcpContextBinding을 사용해야 합니다.
프로토콜 상관 관계에 대한 자세한 내용은 영속 이중 및 요청 회신을 참조하세요. Visual Studio Workflow Designer 활동 템플릿 사용에 대한 자세한 내용은 메시징 활동을 참조하세요. 샘플 코드는 NetContextExchangeCorrelation 샘플을 참조하세요.
내용 기반 상관 관계
내용 기반 상관 관계는 메시지에 있는 일부 정보를 사용하여 해당 메시지를 특정 인스턴스와 연결합니다. 프로토콜 기반 상관 관계와 달리 내용 기반 상관 관계는 애플리케이션 작성자가 연결된 각 메시지에서 이러한 데이터를 찾을 수 있는 위치를 명시적으로 지정해야 합니다. 내용 기반 상관 관계를 사용하는 작업은 MessageQuerySet을 사용하여 이 메시지 데이터를 지정합니다. 내용 기반 상관 관계는 BasicHttpContextBinding과 같은 컨텍스트 바인딩 중 하나를 사용하지 않는 서비스와 통신할 때 유용합니다.