다음을 통해 공유


클라이언트: 채널 팩터리 및 채널

이 항목에서는 채널 팩터리 및 채널 만들기에 대해 설명합니다.

채널 팩터리 및 채널

채널 팩터리에서 채널을 만드는 역할을 담당합니다. 채널 팩터리에서 만든 채널은 메시지를 보내는 데 사용됩니다. 이러한 채널은 위의 계층에서 메시지를 가져오고, 필요한 모든 처리를 수행한 다음, 아래 계층으로 메시지를 보내는 작업을 담당합니다. 다음 그래픽에서는 이 프로세스를 보여 줍니다.

클라이언트 팩터리 및 채널
채널 팩터리는 채널을 만듭니다.

채널 팩터리가 닫힐 때, 아직 닫히지 않은 채널을 닫는 것은 채널 팩터리의 책임입니다. 채널 수신기가 닫힌 경우 새 채널만 수락을 중지하지만 메시지를 계속 받을 수 있도록 기존 채널을 열어 두기 때문에 이 모델은 여기서 비대칭입니다.

WCF는 이 프로세스에 대한 기본 클래스 도우미를 제공합니다. (이 항목에서 설명하는 채널 도우미 클래스의 다이어그램은 채널 모델 개요를 참조하세요.)

다음은 전송: UDP 샘플을 기반으로 합니다.

Channel Factory 만들기

ListViewListBox에서 파생됩니다. 샘플은 메시지 인코더의 메시지 버전에 대한 액세스를 제공하기 위해 GetProperty을(를) 재정의합니다. 또한 샘플은 상태 머신이 OnClose로 전환될 때 인스턴스 분해를 위해 BufferManager를 재정의합니다.

UDP 출력 채널

UdpOutputChannelIOutputChannel를 구현합니다. 생성자는 인수의 유효성을 검사하고 전달된 개체를 기반으로 대상 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  
);  

참고하십시오