WCF(Windows Communication Foundation) SOAP 신뢰할 수 있는 메시징은 SOAP 엔드포인트 간에 엔드 투 엔드 메시지 전송 안정성을 제공합니다. 전송 오류 및 SOAP 메시지 수준 오류를 극복하여 신뢰할 수 없는 네트워크에서 이 작업을 수행합니다. 특히 SOAP 또는 전송 중개자 간에 전송된 메시지에 대한 세션 기반, 단일 및(선택적으로) 정렬된 배달을 제공합니다. 세션 기반 배달은 메시지의 선택적 순서를 사용하여 세션의 메시지를 그룹화하기 위해 제공합니다.
이 항목에서는 신뢰할 수 있는 세션, 세션 사용 방법 및 시기 및 보안 방법에 대해 설명합니다.
WCF 신뢰할 수 있는 세션
WCF 신뢰할 수 있는 세션은 WS-ReliableMessaging 프로토콜에 정의된 SOAP 신뢰할 수 있는 메시징의 구현입니다.
WCF SOAP 신뢰할 수 있는 메시징은 메시징 엔드포인트를 구분하는 중개자의 수 또는 유형에 관계없이 두 엔드포인트 간에 엔드 투 엔드 신뢰할 수 있는 세션을 제공합니다. 여기에는 SOAP(예: HTTP 프록시)를 사용하지 않는 전송 중개자 또는 메시지가 엔드포인트 간에 흐르는 데 필요한 SOAP(예: SOAP 기반 라우터 또는 브리지)를 사용하는 중개자가 포함됩니다. 신뢰할 수 있는 세션 채널은 대화 형 통신을 지원하므로 이러한 채널에 의해 연결된 서비스가 동시에 실행되고 대기 시간이 짧은 조건, 즉 비교적 짧은 시간 내에 메시지를 교환하고 처리합니다. 이 결합은 이러한 구성 요소가 함께 진행되거나 함께 실패하므로 구성 요소 간에 격리가 제공되지 않음을 의미합니다.
신뢰할 수 있는 세션은 두 가지 종류의 오류를 마스크합니다.
손실되거나 중복된 메시지 및 보낸 순서와 다른 순서로 도착하는 메시지를 포함하는 SOAP 메시지 수준 오류입니다.
전송 실패.
신뢰할 수 있는 세션은 WS-ReliableMessaging 프로토콜 및 메모리 내 전송 창을 구현하여 SOAP 메시지 수준 오류를 마스킹하고 전송 실패 시 연결을 다시 설정합니다.
신뢰할 수 있는 세션은 TCP가 IP 패킷에 제공하는 SOAP 메시지를 제공합니다. TCP 소켓 연결은 노드 간에 IP 패킷의 순서가 지정된 단일 전송을 제공합니다. 신뢰할 수 있는 채널은 동일한 유형의 신뢰할 수 있는 전송을 제공하지만 다음과 같은 방법으로 TCP 소켓 안정성과 다릅니다.
안정성은 임의 크기 바이트 패킷이 아닌 SOAP 메시지 수준에 있습니다.
안정성은 TCP를 통한 전송뿐만 아니라 전송 중립적입니다.
안정성은 특정 전송 세션(예: TCP 연결이 제공하는 세션)에 연결되지 않으며 신뢰할 수 있는 세션의 수명 동안 여러 전송 세션을 동시에 또는 순차적으로 사용할 수 있습니다.
신뢰할 수 있는 세션은 발신자와 수신자 SOAP 엔드포인트 간의 연결에 필요한 전송 연결 수에 관계없이 해당 엔드포인트 간에 있습니다. 즉, TCP 안정성은 전송 연결이 종료되는 위치에서 종료되는 반면 신뢰할 수 있는 세션은 엔드 투 엔드 안정성을 제공합니다.
신뢰할 수 있는 세션 및 바인딩
앞에서 설명한 것처럼 신뢰할 수 있는 세션은 전송 중립적입니다. 또한 요청-회신 또는 이중과 같은 많은 메시지 교환 패턴에 대해 신뢰할 수 있는 세션을 설정할 수 있습니다. WCF 신뢰할 수 있는 세션은 바인딩 집합의 속성으로 노출됩니다.
다음을 사용하는 엔드포인트에서 신뢰할 수 있는 세션을 사용합니다.
HTTP 기반 전송 표준 바인딩:
WsHttpBinding
및 요청-회신 또는 단방향 계약을 노출합니다.요청-회신 또는 간단한 단방향 서비스 계약을 통해 신뢰할 수 있는 세션을 사용하는 경우
WsDualHttpBinding
이중, 요청-회신 또는 단방향 계약을 노출합니다.WsFederationHttpBinding
및 요청-회신 또는 단방향 계약을 노출합니다.
TCP 기반 전송 표준 바인딩:
-
NetTcpBinding
이중, 요청 회신 또는 단방향 계약을 노출합니다.
-
HTTPS(문제에 대한 자세한 내용은 신뢰할 수 있는 세션 및 보안 참조) 또는 명명된 파이프 바인딩과 같은 사용자 지정 바인딩을 만들어 다른 바인딩 에서 신뢰할 수 있는 세션을 사용합니다.
다양한 기본 채널 유형에 신뢰할 수 있는 세션을 쌓을 수 있으며 결과적으로 신뢰할 수 있는 세션 채널 모양은 다양합니다. 클라이언트와 서버 모두에서 지원되는 신뢰할 수 있는 세션 채널의 유형은 사용되는 기본 채널의 유형에 따라 달라집니다. 다음 표에서는 기본 채널 형식의 함수로 클라이언트에서 지원되는 세션 채널 유형을 나열합니다.
지원되는 신뢰할 수 있는 세션 채널 형식입니다† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
예 | 예 | 예 | 예 |
IRequestSessionChannel |
예 | 예 | 아니오 | 아니오 |
IDuplexSessionChannel |
아니오 | 아니오 | 예 | 예 |
†지원되는 채널 형식은 제네릭 TChannel
매개변수 값에 대한 BuildChannelFactory<TChannel>(BindingContext) 메서드에 전달되는 사용 가능한 값입니다.
다음 표에서는 기본 채널 유형의 함수로 서버에서 지원되는 세션 채널의 유형을 나열합니다.
지원되는 신뢰할 수 있는 세션 채널 유형 | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
예 | 예 | 예 | 예 |
IReplySessionChannel |
예 | 예 | 아니오 | 아니오 |
IDuplexSessionChannel |
아니오 | 아니오 | 예 | 예 |
제네릭 TChannel
매개 변수 값으로 메서드 BuildChannelListener<TChannel>(BindingContext)에 전달되는 값 중 지원되는 채널 형식은 사용 가능한 값들입니다.
신뢰할 수 있는 세션 및 보안
신뢰할 수 있는 세션을 보호하는 것은 통신 당사자(서비스 및 클라이언트)가 인증되고 세션에서 교환된 메시지가 변조되지 않도록 하는 데 중요합니다. 또한 각 개별 신뢰할 수 있는 세션의 무결성을 보장하는 것이 중요합니다. 신뢰할 수 있는 세션은 보안 세션 채널에서 나타내고 관리하는 보안 컨텍스트에 바인딩하여 보호됩니다. 보안 채널은 보안 세션을 제공합니다. 그런 다음 세션 설정 중에 교환된 보안 토큰을 사용하여 신뢰할 수 있는 세션에서 메시지를 보호합니다.
TCP-S를 통해 신뢰할 수 있는 세션이 있는 경우 TCP 세션은 신뢰할 수 있는 세션에 연결됩니다. 따라서 전송 보안을 통해 보안도 신뢰할 수 있는 세션에 연결됩니다. 이 경우 연결 다시 설정이 해제됩니다.
유일한 예외는 HTTPS를 사용하는 경우입니다. SSL(Secure Sockets Layer) 세션은 신뢰할 수 있는 세션에 바인딩되지 않습니다. 이는 보안 컨텍스트(SSL 세션)를 공유하는 세션이 서로 보호되지 않기 때문에 위협을 가합니다. 애플리케이션에 따라 실제 위협이 될 수도 있고 아닐 수도 있습니다.
신뢰할 수 있는 세션 사용
WCF 신뢰할 수 있는 세션을 사용하려면 신뢰할 수 있는 세션을 지원하는 바인딩이 있는 엔드포인트를 만듭니다. WCF에서 제공하는 시스템 제공 바인딩 중 하나를 사용하여 신뢰할 수 있는 세션을 사용하도록 설정하거나 이 작업을 수행하는 사용자 지정 바인딩을 만듭니다.
기본적으로 신뢰할 수 있는 세션을 지원하고 사용하도록 설정하는 시스템 정의 바인딩은 다음과 같습니다.
신뢰할 수 있는 세션을 옵션으로 지원하지만 기본적으로 사용하도록 설정하지 않는 시스템 제공 바인딩은 다음과 같습니다.
사용자 지정 바인딩을 만드는 방법의 예는 방법: HTTPS를 사용하여 사용자 지정 신뢰할 수 있는 세션 바인딩 만들기를 참조하세요.
신뢰할 수 있는 세션을 지원하는 WCF 바인딩에 대한 설명은 System-Provided 바인딩을 참조하세요.
신뢰할 수 있는 세션을 사용하는 경우
애플리케이션에서 신뢰할 수 있는 세션을 사용하는 시기를 이해하는 것이 중요합니다. WCF는 동시에 활성 상태인 엔드포인트 간에 신뢰할 수 있는 세션을 지원합니다. 애플리케이션에서 일정 기간 동안 엔드포인트 중 하나를 사용할 수 없도록 요구하는 경우 큐를 사용하여 안정성을 달성합니다.
시나리오에 TCP를 통해 연결된 두 개의 엔드포인트가 필요한 경우 TCP는 신뢰할 수 있는 메시지 교환을 제공하기에 충분할 수 있습니다. 그러나 TCP는 패킷이 순서대로 한 번만 도착하도록 하기 때문에 신뢰할 수 있는 세션을 사용할 필요는 없습니다.
시나리오에 다음과 같은 특성이 있는 경우 신뢰할 수 있는 세션을 사용하는 것을 진지하게 고려해야 합니다.
SOAP 라우터와 같은 SOAP 중개자
프록시 중개자 또는 전송 브리지
간헐적 연결
HTTP를 통한 세션