신뢰할 수 있는 세션 개요
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 엔드포인트 간의 연결에 필요한 전송 연결 수에 관계없이 발신자 및 수신자 SOAP 엔드포인트 사이에 위치합니다. 즉, TCP 안정성은 전송 연결이 종료되는 위치에서 종료되며, 신뢰할 수 있는 세션은 종단 간 안정성을 제공합니다.
신뢰할 수 있는 세션 및 바인딩
앞에서 언급했듯이 신뢰할 수 있는 세션은 전송 중립적입니다. 또한 요청-회신 또는 이중과 같은 많은 메시지 교환 패턴을 통해 신뢰할 수 있는 세션을 설정할 수 있습니다. WCF 신뢰할 수 있는 세션은 바인딩 집합의 속성으로 노출됩니다.
다음을 사용하는 엔드포인트에서 신뢰할 수 있는 세션을 사용합니다.
HTTP 기반 전송 표준 바인딩:
WsHttpBinding
및 요청-회신 또는 단방향 계약을 노출합니다.요청-회신 또는 단순 단방향 서비스 계약을 통해 신뢰할 수 있는 세션을 사용하는 경우 다음과 같습니다.
WsDualHttpBinding
및 이중, 요청-회신 또는 단방향 계약을 노출합니다.WsFederationHttpBinding
및 요청-회신 또는 단방향 계약을 노출합니다.
TCP 기반 전송 표준 바인딩:
NetTcpBinding
및 이중, 요청-회신 또는 단방향 계약을 노출합니다.
HTTPS(문제에 대한 자세한 내용은 신뢰할 수 있는 세션 및 보안 참조) 또는 명명된 파이프 바인딩과 같은 사용자 지정 바인딩을 만들어 다른 바인딩에서 신뢰할 수 있는 세션을 사용합니다.
신뢰할 수 있는 세션을 서로 다른 기본 채널 형식에 쌓을 수 있으며 결과적으로 신뢰할 수 있는 세션 채널 모양이 변경됩니다. 클라이언트 및 서버 모두에서 지원되는 신뢰할 수 있는 세션 채널 형식은 사용 중인 기본 채널 형식에 따라 다릅니다. 다음 표에서는 기본 채널 형식의 기능으로서 클라이언트에서 지원되는 세션 채널 형식에 대해 설명합니다.
지원되는 신뢰할 수 있는 세션 채널 형식† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
예 | 네 | 네 | 네 |
IRequestSessionChannel |
네 | 네 | 없음 | 없음 |
IDuplexSessionChannel |
없음 | 없음 | 네 | 예 |
지원되는 채널 형식은 BuildChannelFactory<TChannel>(BindingContext) 메서드로 전달된 제네릭 TChannel
매개 변수 값에 대해 사용할 수 있는 값입니다.
다음 표에서는 기본 채널 형식의 기능으로서 서버에서 지원되는 세션 채널 형식에 대해 설명합니다.
지원되는 신뢰할 수 있는 세션 채널 형식‡ | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
예 | 네 | 네 | 네 |
IReplySessionChannel |
네 | 네 | 없음 | 없음 |
IDuplexSessionChannel |
없음 | 없음 | 네 | 예 |
지원되는 채널 형식은 BuildChannelListener<TChannel>(BindingContext) 메서드로 전달된 제네릭 TChannel
매개 변수 값에 대해 사용할 수 있는 값입니다.
신뢰할 수 있는 세션 및 보안
신뢰할 수 있는 세션의 보안을 유지하기 위해서는 통신 당사자(서비스 및 클라이언트)가 인증되고 세션 내에서 교환된 메시지가 훼손되지 않도록 해야 합니다. 또한 각 개별 신뢰할 수 있는 세션의 무결성을 확인해야 합니다. 신뢰할 수 있는 세션은 보안 세션 채널에 의해 표시되고 관리되는 보안 컨텍스트에 바인딩하여 보안을 유지합니다. 보안 채널은 보안 세션을 제공합니다. 세션 설정 동안 교환된 보안 토큰은 신뢰할 수 있는 세션의 메시지 보안을 유지하는 데 사용됩니다.
TCP-S를 통한 신뢰할 수 있는 세션인 경우 TCP 세션은 신뢰할 수 있는 세션에 연결됩니다. 따라서 전송 보안은 보안이 신뢰할 수 있는 세션에도 연결되도록 합니다. 이 경우 연결 재설정이 꺼집니다.
HTTPS를 사용하는 경우에만 예외입니다. SSL(Secure Sockets Layer) 세션은 신뢰할 수 있는 세션에 바인딩되지 않습니다. 이로 인해 보안 컨텍스트를 공유하는 세션(SSL 세션)이 서로 간에 보호되지 않기 때문에 위협이 될 수 있습니다. 이것은 애플리케이션에 따라 실제 위협이 되거나 되지 않을 수도 있습니다.
신뢰할 수 있는 세션 사용
WCF 신뢰할 수 있는 세션을 사용하려면 신뢰할 수 있는 세션을 지원하는 바인딩으로 엔드포인트를 만듭니다. 신뢰할 수 있는 세션이 활성화된 상태에서 WCF가 제공하는 시스템 제공 바인딩 중 하나를 사용하거나 이를 수행하는 사용자 지정 바인딩을 만듭니다.
기본적으로 신뢰할 수 있는 세션을 지원하고 사용하도록 설정하는 시스템 정의 바인딩은 다음과 같습니다.
선택 사항으로 신뢰할 수 있는 세션을 지원하지만 기본적으로 사용하지 않는 시스템 제공 바인딩은 다음과 같습니다.
사용자 지정 바인딩을 만드는 방법의 예는 방법: HTTPS를 사용하여 신뢰할 수 있는 사용자 지정 세션 바인딩 만들기를 참조하세요.
신뢰할 수 있는 세션을 지원하는 WCF 바인딩에 대한 설명은 시스템 제공 바인딩을 참조하세요.
신뢰할 수 있는 세션을 사용하는 시기
애플리케이션에서 신뢰할 수 있는 세션을 사용하는 시기를 이해하는 것이 중요합니다. WCF에서는 동시에 활성화되어 작동하는 엔드포인트 간에 신뢰할 수 있는 세션을 지원합니다. 애플리케이션에서 엔드포인트 중 하나를 일정 시간 동안 사용할 수 없도록 해야 하는 경우 큐를 사용하여 안정성을 확보합니다.
시나리오에서 TCP를 통해 연결된 두 개의 엔드포인트가 필요한 경우 TCP는 신뢰할 수 있는 메시지 교환을 제공하기에 충분할 수 있습니다. 그러나 TCP는 패킷이 순서대로 한 번만 도착하도록 보장하므로 신뢰할 수 있는 세션을 사용할 필요는 없습니다.
시나리오에 다음과 같은 특징이 있는 경우 신뢰할 수 있는 세션 사용을 심각하게 고려해야 합니다.
SOAP 라우터와 같은 SOAP 매개자
프록시 매개자 또는 전송 브리지
간헐적 연결
HTTP를 통한 세션