라우팅 서비스는 메시지 라우터 역할을 하는 제네릭 SOAP 중개자입니다. 라우팅 서비스의 핵심 기능은 메시지 콘텐츠를 기반으로 메시지를 라우팅하는 기능입니다. 이를 통해 헤더 또는 메시지 본문에서 메시지 자체의 값을 기반으로 메시지를 클라이언트 엔드포인트로 전달할 수 있습니다.
RoutingService 네임스페이스에서 System.ServiceModel.Routing WCF(Windows Communication Foundation) 서비스로 구현됩니다. 라우팅 서비스는 메시지를 수신하는 하나 이상의 서비스 엔드포인트를 노출한 다음 메시지 콘텐츠에 따라 각 메시지를 하나 이상의 클라이언트 엔드포인트로 라우팅합니다. 이 서비스는 다음과 같은 기능을 제공합니다.
콘텐츠 기반 라우팅
서비스 집계
서비스 버전 관리
우선 순위 라우팅
동적 구성
프로토콜 연결
SOAP 처리
고급 오류 처리
백업 엔드포인트
이러한 목표 중 하나 이상을 수행하는 중간 서비스를 만들 수 있지만 이러한 구현은 특정 시나리오 또는 솔루션과 연결되어 새 애플리케이션에 쉽게 적용할 수 없는 경우가 많습니다.
라우팅 서비스는 WCF 서비스 및 채널 모델과 호환되며 SOAP 기반 메시지의 콘텐츠 기반 라우팅을 수행할 수 있는 일반적이고 동적으로 구성 가능한 플러그형 SOAP 중간자를 제공합니다.
비고
라우팅 서비스는 현재 WCF REST 서비스의 라우팅을 지원하지 않습니다. REST 호출을 라우팅하려면 사용 System.Web.Routing 또는 애플리케이션 요청 라우팅을 고려합니다.
콘텐츠 기반 라우팅
콘텐츠 기반 라우팅은 메시지에 포함된 하나 이상의 값을 기반으로 메시지를 라우팅하는 기능입니다. 라우팅 서비스는 각 메시지를 검사하고 사용자가 만든 메시지 내용 및 라우팅 논리에 따라 대상 엔드포인트로 라우팅합니다. 콘텐츠 기반 라우팅은 서비스 집계, 서비스 버전 관리 및 우선 순위 라우팅의 기초를 제공합니다.
콘텐츠 기반 라우팅을 구현하기 위해 라우팅 서비스는 라우팅할 메시지 내의 특정 값을 일치시키는 데 사용되는 구현을 사용합니다 MessageFilter . MessageFilter가 메시지와 일치하는 경우 메시지는 MessageFilter와 연결된 대상 엔드포인트로 라우팅됩니다. 메시지 필터는 필터 테이블(FilterTableCollection)로 그룹화되어 복잡한 라우팅 논리를 생성합니다. 예를 들어 필터 테이블에는 메시지를 5개의 대상 엔드포인트 중 하나로만 라우팅하는 5개의 상호 배타적 메시지 필터가 포함될 수 있습니다.
라우팅 서비스를 사용하면 콘텐츠 기반 라우팅을 수행하는 데 사용되는 논리를 구성하고 런타임에 라우팅 논리를 동적으로 업데이트할 수 있습니다.
메시지 필터를 필터 테이블로 그룹화하여 다음과 같은 여러 라우팅 시나리오를 처리할 수 있는 라우팅 논리를 생성할 수 있습니다.
서비스 집계
서비스 버전 관리
우선 순위 라우팅
동적 구성
메시지 필터 및 필터 테이블에 대한 자세한 내용은 라우팅 소개 및 메시지 필터를 참조하세요.
서비스 집계
콘텐츠 기반 라우팅을 사용하면 외부 클라이언트 애플리케이션에서 메시지를 수신하는 하나의 엔드포인트를 노출한 다음 메시지 내의 값을 기반으로 각 메시지를 적절한 내부 엔드포인트로 라우팅할 수 있습니다. 이는 다양한 백 엔드 애플리케이션에 대해 하나의 특정 엔드포인트를 제공하고 애플리케이션을 다양한 서비스로 팩터링하면서 고객에게 하나의 애플리케이션 엔드포인트를 제공하는 데 유용합니다.
서비스 버전 관리
솔루션의 새 버전으로 마이그레이션할 때 기존 고객에게 서비스를 제공하기 위해 이전 버전을 병렬로 유지 관리해야 할 수 있습니다. 이를 위해서는 최신 버전에 연결하는 클라이언트가 솔루션과 통신할 때 다른 주소를 사용해야 하는 경우가 많습니다. 라우팅 서비스를 사용하면 메시지에 포함된 버전별 정보를 기반으로 메시지를 적절한 솔루션으로 라우팅하여 두 버전의 솔루션을 모두 제공하는 하나의 서비스 엔드포인트를 노출할 수 있습니다. 이러한 구현의 예는 방법: 서비스 버전 관리 방법을 참조하세요.
우선 순위 라우팅
여러 클라이언트에 서비스를 제공할 때 이러한 파트너의 모든 데이터를 다른 클라이언트와 별도로 처리해야 하는 일부 파트너와 SLA(서비스 수준 계약)가 있을 수 있습니다. 메시지에 포함된 고객별 정보를 찾는 필터를 사용하여 특정 파트너의 메시지를 SLA 요구 사항을 충족하기 위해 만든 엔드포인트로 쉽게 라우팅할 수 있습니다.
동적 구성
서비스 중단 없이 메시지를 처리해야 하는 중요 업무용 시스템을 지원하려면 런타임에 시스템 내에서 구성 요소의 구성을 수정할 수 있어야 합니다. 이러한 필요를 지원하기 위해 라우팅 서비스는 IExtension<T> 구현을 제공합니다. 이 RoutingExtension 구현은 런타임에 라우팅 서비스 구성을 동적으로 업데이트할 수 있습니다.
라우팅 서비스의 동적 구성에 대한 자세한 내용은 라우팅 소개를 참조하세요.
프로토콜 브리징
중간 시나리오의 과제 중 하나는 내부 엔드포인트에 메시지가 수신되는 엔드포인트와 다른 전송 또는 SOAP 버전 요구 사항이 있을 수 있다는 것입니다. 이 시나리오를 지원하기 위해 라우팅 서비스는 SOAP 메시지를 대상 엔드포인트에서 요구하는 프로토콜 MessageVersion 로 처리하는 것을 포함하여 프로토콜을 브리지할 수 있습니다. 이러한 방식으로 하나의 프로토콜을 내부 통신에 사용할 수 있고 다른 프로토콜은 외부 통신에 사용할 수 있습니다.
다른 전송을 사용하는 엔드포인트 간의 메시지 라우팅을 지원하기 위해 라우팅 서비스는 다른 프로토콜을 브리지할 수 있도록 하는 시스템 제공 바인딩을 사용합니다. 이는 라우팅 서비스에서 노출하는 서비스 엔드포인트가 메시지가 라우팅되는 클라이언트 엔드포인트와 다른 프로토콜을 사용하는 경우 자동으로 발생합니다.
SOAP 처리
일반적인 라우팅 요구 사항은 SOAP 요구 사항이 다른 엔드포인트 간에 메시지를 라우팅하는 기능입니다. 이 요구 사항을 지원하기 위해 라우팅 서비스는 메시지가 라우팅되기 전에 대상 엔드포인트의 요구 사항을 충족하는 새 SoapProcessingBehavior을 자동으로 만드는 기능을 제공합니다. 또한 이 동작은 응답의 MessageVersion이 원래 요청의 MessageVersion 과 일치하도록 요청 클라이언트 애플리케이션에 반환하기 전에 응답 메시지에 대한 새 MessageVersion 을 만듭니다.
SOAP 처리에 대한 자세한 내용은 라우팅 소개를 참조하세요.
오류 처리
네트워크 통신에 의존하는 분산 서비스로 구성된 시스템에서는 시스템 내의 통신이 일시적인 네트워크 오류에 저항하도록 하는 것이 중요합니다. 라우팅 서비스는 서비스 중단을 초래할 수 있는 많은 통신 오류 시나리오를 처리할 수 있는 오류 처리를 구현합니다.
라우팅 서비스에서 메시지를 보내려고 시도하는 동안 오류가 발생하면 CommunicationException 오류 처리가 수행됩니다. 이러한 예외는 일반적으로 정의된 클라이언트 엔드포인트(예: , 또는EndpointNotFoundException)와 통신하는 동안 문제가 발생했음을 ServerTooBusyExceptionCommunicationObjectFaultedException나타냅니다. 오류 처리 코드는 TimeoutException 이 발생할 때 전송을 catch하고 다시 시도합니다. 이는 CommunicationException에서 파생되지 않은 또 다른 일반적인 예외입니다.
오류 처리에 대한 자세한 내용은 라우팅 소개를 참조하세요.
백업 엔드포인트
필터 테이블의 각 필터 정의와 연결된 대상 클라이언트 엔드포인트 외에도 전송 실패 시 메시지가 라우팅될 백업 엔드포인트 목록을 만들 수도 있습니다. 오류가 발생하고 필터 항목에 대한 백업 목록이 정의되면 라우팅 서비스에서 목록에 정의된 첫 번째 엔드포인트로 메시지를 보내려고 시도합니다. 이 전송 시도가 실패하면 서비스는 다음 엔드포인트를 시도하고 전송 시도가 성공할 때까지 이 프로세스를 계속하거나, 전송 관련 오류가 반환되지 않거나, 백업 목록의 모든 엔드포인트에서 전송 오류를 반환합니다.
백업 엔드포인트에 대한 자세한 내용은 라우팅 소개 및 메시지 필터를 참조하세요.
스트리밍
스트리밍을 지원하도록 바인딩을 설정하면 라우팅 서비스가 메시지를 성공적으로 스트리밍할 수 있습니다. 그러나 메시지를 버퍼링해야 하는 몇 가지 조건이 있습니다.
멀티캐스트(추가 메시지 복사본을 만드는 버퍼)
장애 조치(메시지를 백업으로 보내야 하는 경우 버퍼)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly는 false입니다(필터가 본문을 검사할 수 있도록 MessageFilterTable을 MessageBuffer와 함께 표시하는 버퍼)
동적 구성