이 항목에서는 채널 팩터리 및 채널 만들기에 대해 설명합니다.
채널 팩터리 및 채널
채널 팩터리에서 채널을 만드는 역할을 담당합니다. 채널 팩터리에서 만든 채널은 메시지를 보내는 데 사용됩니다. 이러한 채널은 위의 계층에서 메시지를 가져오고, 필요한 모든 처리를 수행한 다음, 아래 계층으로 메시지를 보내는 작업을 담당합니다. 다음 그래픽에서는 이 프로세스를 보여 줍니다.
채널 팩터리는 채널을 만듭니다.
채널 팩터리가 닫힐 때, 아직 닫히지 않은 채널을 닫는 것은 채널 팩터리의 책임입니다. 채널 수신기가 닫힌 경우 새 채널만 수락을 중지하지만 메시지를 계속 받을 수 있도록 기존 채널을 열어 두기 때문에 이 모델은 여기서 비대칭입니다.
WCF는 이 프로세스에 대한 기본 클래스 도우미를 제공합니다. (이 항목에서 설명하는 채널 도우미 클래스의 다이어그램은 채널 모델 개요를 참조하세요.)
이 클래스는 CommunicationObjectICommunicationObject 2단계에서 설명한 상태 컴퓨터를 구현 하고 적용합니다.
이 ChannelManagerBase 클래스는 CommunicationObject을(를) 구현하고, System.ServiceModel.Channels.ChannelFactoryBase 및 System.ServiceModel.Channels.ChannelListenerBase을(를) 위한 통합 기본 클래스를 제공합니다. 클래스는 ChannelManagerBase를 구현하는 기본 클래스인 ChannelBase와 함께 IChannel에서 작동합니다.
ChannelFactoryBase 클래스는 ChannelManagerBase 및 IChannelFactory를 구현하고
CreateChannel
오버로드를 하나의OnCreateChannel
추상 메서드로 통합합니다.클래스는 ChannelListenerBase .를 구현합니다.IChannelListener 기본 상태 관리를 처리합니다.
다음은 전송: UDP 샘플을 기반으로 합니다.
Channel Factory 만들기
ListView는 ListBox에서 파생됩니다. 샘플은 메시지 인코더의 메시지 버전에 대한 액세스를 제공하기 위해 GetProperty을(를) 재정의합니다. 또한 샘플은 상태 머신이 OnClose로 전환될 때 인스턴스 분해를 위해 BufferManager를 재정의합니다.
UDP 출력 채널
UdpOutputChannel
는 IOutputChannel를 구현합니다. 생성자는 인수의 유효성을 검사하고 전달된 개체를 기반으로 대상 EndPoint 개체를 EndpointAddress 생성합니다.
OnOpen 덮어쓰기는 이 EndPoint로 메시지를 보내는 데 사용되는 소켓을 생성합니다.
this.socket = new Socket(
this.remoteEndPoint.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp
);
채널은 부드럽게 또는 거칠게 닫을 수 있습니다. 채널이 정상적으로 닫히면 소켓이 닫히고 기본 클래스 OnClose
메서드에 대한 호출이 이루어집니다. 예외가 발생하면 인프라는 채널을 정리하도록 호출 Abort
합니다.
this.socket.Close();
base.OnClose(timeout);
구현 Send()
및 BeginSend()
/EndSend()
. 이는 두 개의 주요 섹션으로 나뉩니다. 먼저 메시지를 바이트 배열로 직렬화합니다.
ArraySegment<byte> messageBuffer = EncodeMessage(message);
그런 다음, 결과 데이터를 유선으로 보냅니다.
this.socket.SendTo(
messageBuffer.Array,
messageBuffer.Offset,
messageBuffer.Count,
SocketFlags.None,
this.remoteEndPoint
);