WCF(Windows Communication Foundation) 채널 스택은 메시지를 처리하는 하나 이상의 채널이 있는 계층화된 통신 스택입니다. 스택의 맨 아래에는 채널 스택을 기본 전송(예: TCP, HTTP, SMTP 및 기타 유형의 전송)에 맞게 조정하는 전송 채널이 있습니다. 채널은 메시지를 보내고 받기 위한 하위 수준 프로그래밍 모델을 제공합니다. 이 프로그래밍 모델은 여러 인터페이스 및 WCF 채널 모델이라고 하는 다른 형식을 사용합니다. 이 항목에서는 채널 셰이프, 기본 채널 수신기(서비스) 및 채널 팩터리(클라이언트)의 생성에 대해 설명합니다.
채널 스택
WCF 엔드포인트는 채널 스택이라는 통신 스택을 사용하여 전 세계와 통신합니다. 다음 다이어그램은 채널 스택을 다른 통신 스택(예: TCP/IP)과 비교합니다.
첫째, 유사성: 두 경우 모두 스택의 각 계층은 해당 계층 아래에 있는 세계의 일부 추상화 기능을 제공하며 해당 추상화만 바로 위에 있는 계층에 노출합니다. 각 계층은 바로 아래에 있는 레이어의 추상화만 사용합니다. 또한 두 경우 모두 두 스택이 통신할 때 각 계층은 다른 스택의 해당 계층과 통신합니다. 예를 들어 IP 계층은 IP 계층과 통신하고 TCP 계층은 TCP 계층과 통신합니다.
이제 차이점: TCP 스택은 실제 네트워크의 추상화 기능을 제공하도록 설계되었지만 채널 스택은 메시지 배달 방법, 즉 전송 방법뿐만 아니라 메시지에 있는 항목 또는 통신에 사용되는 프로토콜과 같은 기타 기능을 추상화하도록 설계되었습니다. 전송을 포함하지만 그보다 훨씬 더. 예를 들어 신뢰할 수 있는 세션 바인딩 요소는 채널 스택의 일부이지만 전송 또는 전송 자체 아래에 있지 않습니다. 이 추상화는 스택의 아래쪽 채널이 기본 전송 프로토콜을 채널 스택 아키텍처에 맞게 조정하도록 요구한 다음, 스택의 채널에 의존하여 안정성 보장 및 보안과 같은 통신 기능을 제공하여 달성됩니다.
메시지는 Message 개체로서 통신 스택을 통해 흐릅니다. 위 그림과 같이 아래쪽 채널을 전송 채널이라고 합니다. 메시지를 다른 당사자와 주고받는 것은 채널의 역할입니다. 여기에는 다른 당사자와의 통신에 사용되는 형식으로 개체를 변환하고 변환된 개체를 다시 원래 형식으로 되돌리는 책임이 포함됩니다. 전송 채널 위에는 신뢰할 수 있는 배달 보장과 같은 통신 기능을 제공하는 각 프로토콜 채널이 있을 수 있습니다. 프로토콜 채널은 Message 객체 형태로 메시지가 전달되는 방식으로 작동합니다. 일반적으로 헤더를 추가하거나 본문을 암호화하여 메시지를 변환하거나 수신 승인과 같은 자체 프로토콜 제어 메시지를 보내고 받습니다.
채널 형상
각 채널은 채널 셰이프 인터페이스 또는 채널 셰이프라고 하는 하나 이상의 인터페이스를 구현합니다. 이러한 채널 셰이프는 채널이 구현하는 송수신 또는 요청 및 회신, 채널 호출 사용자와 같은 통신 지향 메서드를 제공합니다. 채널 셰이프의 기반에는 IChannel 스택의 채널에 의해 노출되는 임의의 기능에 액세스하기 위한 계층화된 메커니즘으로 사용되는 TGetProperty 메서드를 제공하는 <>인터페이스인 인터페이스가 있습니다. 확장 IChannel 되는 5개의 채널 셰이프는 다음과 같습니다.
또한 이러한 각 셰이프에는 세션을 지원하도록 확장되는 System.ServiceModel.Channels.ISessionChannel<TSession> 상응하는 형태가 있습니다. 이는 다음과 같습니다.
채널 셰이프는 기존 전송 프로토콜에서 지원하는 몇 가지 기본 메시지 교환 패턴 후에 패턴화됩니다. 예를 들어, 단방향 메시징은 IInputChannel/IOutputChannel 쌍에 해당하고, 요청-회신은 IRequestChannel/IReplyChannel 쌍에 해당하며, 양방향 이중 통신은 IDuplexChannel 쌍에 해당합니다 (이는 둘 다 IInputChannel 및 IOutputChannel을 확장합니다).
채널 스택을 사용한 프로그래밍
채널 스택은 일반적으로 바인딩이 채널 스택을 만드는 팩터리 패턴을 사용하여 만들어집니다. 송신 쪽에서는 바인딩을 이용하여 ChannelFactory를 생성하며, 이 ChannelFactory는 채널 스택을 구축하고 스택의 최상위 채널에 대한 참조를 반환합니다. 그러면 애플리케이션에서 이 채널을 사용하여 메시지를 보낼 수 있습니다. 자세한 내용은 클라이언트 Channel-Level 프로그래밍을 참조하세요.
받는 쪽에서는 들어오는 메시지를 수신할 IChannelListener를 빌드하기 위해 바인딩을 사용합니다. 채널 IChannelListener 스택을 만들고 애플리케이션 참조를 최상위 채널에 전달하여 수신 대기 애플리케이션에 메시지를 제공합니다. 그런 다음 애플리케이션은 이 채널을 사용하여 들어오는 메시지를 받습니다. 자세한 내용은 서비스 Channel-Level 프로그래밍을 참조하세요.
채널 개체 모델
채널 개체 모델은 채널, 채널 수신기 및 채널 팩터리를 구현하는 데 필요한 인터페이스의 핵심 집합입니다. 사용자 지정 구현을 지원하기 위해 제공되는 몇 가지 기본 클래스도 있습니다.
채널 수신기는 들어오는 메시지를 수신 대기한 다음 채널 수신기에서 만든 채널을 통해 위의 계층으로 전달합니다.
채널 팩터리는 메시지를 보내는 데 사용되는 채널을 만들고 채널 팩터리를 닫을 때 만든 모든 채널을 닫습니다.
ICommunicationObject 는 모든 통신 개체가 구현하는 기본 상태 컴퓨터를 정의하는 핵심 인터페이스입니다. CommunicationObject 는 인터페이스를 다시 구현하는 대신 다른 채널 클래스에서 파생할 수 있는 이 핵심 인터페이스의 구현을 제공합니다. 필수 사항은 아니지만, 사용자 지정 채널은 ICommunicationObject를 직접 구현할 수 있으며 CommunicationObject에서 상속받지 않아도 됩니다. 그림 3의 클래스는 채널 모델의 일부로 간주되지 않습니다. 채널을 빌드하려는 사용자 지정 채널 구현자가 사용할 수 있는 도우미입니다.
다음 항목에서는 채널 개체 모델과 사용자 지정 채널을 빌드하는 데 도움이 되는 다양한 개발 영역에 대해 설명합니다.
| 주제 | 설명 |
|---|---|
| 서비스: 채널 수신기 및 채널 | 서비스 애플리케이션에서 들어오는 채널을 수신 대기하는 채널 수신기에 대해 설명합니다. |
| 클라이언트: 채널 생성기 및 채널 | 서비스 애플리케이션에 연결할 채널을 만드는 채널 팩터리에 대해 설명합니다. |
| 상태 변경 이해 | System.ServiceModel.ICommunicationObject 인터페이스가 채널에서 상태 변화를 어떻게 모델링하는지 설명합니다. |
| 메시지 교환 패턴 선택 | 채널에서 지원할 수 있는 6가지 기본 메시지 교환 패턴에 대해 설명합니다. |
| 예외 및 오류 처리 | 사용자 지정 채널에서 오류 및 예외를 처리하는 방법을 설명합니다. |
| 구성 및 메타데이터 지원 | 애플리케이션 모델에서 사용자 지정 채널의 사용을 지원하는 방법과 바인딩 및 바인딩 요소를 사용하여 메타데이터를 내보내고 가져오는 방법을 설명합니다. |