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