서비스: 채널 수신기 및 채널
채널 개체에는 채널, 채널 수신기 및 채널 팩터리의 세 가지 범주가 있습니다. 채널은 애플리케이션과 채널 스택 사이의 인터페이스입니다. 채널 수신기는 받는(또는 수신) 쪽, 일반적으로 새 들어오는 메시지 또는 연결에 대한 응답으로 채널을 만듭니다. 채널 팩터리는 보내는 쪽에 엔드포인트와 통신을 시작할 채널을 만듭니다.
채널 수신기 및 채널
채널 수신기는 채널을 만들고 아래 계층 또는 네트워크로부터 메시지를 받습니다. 받은 메시지는 채널 수신기에서 만든 채널을 사용하여 위의 계층에 전달됩니다.
다음 다이어그램에서는 메시지를 받고 위의 계층에 전달하는 프로세스를 보여 줍니다.
채널 수신기는 채널을 통해 메시지를 받아서 위의 계층에 전달합니다.
구현에서는 실제로 큐를 사용하지 않을 수도 있지만 이 프로세스는 개념적으로 각 채널 내의 큐로 모델링될 수 있습니다. 채널 수신기는 아래 계층 또는 네트워크로부터 메시지를 받아서 큐에 넣습니다. 채널은 큐에서 메시지를 가져오고 계층이 채널에서 Receive
를 호출하는 것과 같은 방법으로 메시지를 요청하면 위의 계층으로 해당 메시지를 전달합니다.
WCF는 이 프로세스에 대한 기본 클래스 도우미를 제공합니다. 이 문서에서 설명된 채널 도우미 클래스의 다이어그램은 채널 모델 개요를 참조하세요.
CommunicationObject 클래스는 ICommunicationObject를 구현하고 채널 개발의 2단계에 설명된 상태 시스템을 적용합니다.
ChannelManagerBase 클래스는 CommunicationObject를 구현하고 ChannelFactoryBase 및 ChannelListenerBase에 대한 통합 기본 클래스를 제공합니다. ChannelManagerBase 클래스는 ChannelBase을 구현하는 기본 클래스인 IChannel와 함께 사용됩니다.
ChannelFactoryBase 클래스는 ChannelManagerBase 및 IChannelFactory를 구현하고
CreateChannel
오버로드를 하나의OnCreateChannel
추상 메서드에 통합합니다.ChannelListenerBase 클래스는 IChannelListener를 구현합니다. 이 클래스는 기본 상태 관리를 담당합니다.
다음 설명은 전송: UDP 샘플을 기반으로 합니다.
채널 수신기 만들기
샘플이 구현하는 UdpChannelListener
는 ChannelListenerBase 클래스에서 파생됩니다. 단일 UDP 소켓을 사용하여 데이터그램을 받습니다. OnOpen
메서드는 비동기 루프에서 UDP 소켓을 사용하여 데이터를 받습니다. 그런 다음 데이터는 메시지 인코딩 시스템을 사용하여 메시지로 변환됩니다.
message = UdpConstants.MessageEncoder.ReadMessage(
new ArraySegment<byte>(buffer, 0, count),
bufferManager
);
같은 데이터그램 채널은 여러 소스에서 도착한 메시지를 나타내므로 UdpChannelListener
는 singleton 수신기입니다. 한 번에 최대 하나의 활성 IChannel이 이 수신기에 연결됩니다. 이 샘플에서는 AcceptChannel 메서드에서 반환되는 채널이 이후에 삭제되는 경우에만 새 채널을 생성합니다. 메시지를 받으면 이 singleton 채널의 큐에 삽입됩니다.
UdpInputChannel
UdpInputChannel
클래스는 IInputChannel을 구현합니다. 이 클래스는 UdpChannelListener
의 소켓으로 채워지는 들어오는 메시지의 큐로 구성됩니다. 이러한 메시지는 Receive 메서드에 의해 큐에서 제거됩니다.