共用方式為


用戶端:通道處理站與通道

這個主題會討論通道處理站和通道的建立方面。

通道處理站與通道

通道處理站會負責建立通道。而通道處理站所建立的通道會用於傳送訊息。這些通道會負責從上層取得訊息、執行必須的處理動作,然後將訊息傳送至下層。下圖會說明這個程序。

用戶端處理站和通道

關閉時,通道處理站會負責關閉所建立但尚未關閉的任何通道。請注意,此處的模型為非對稱,這是因為關閉通道接聽項時,只會停止接受新通道,但會讓現有的通道保持為開啟,這樣才可以繼續接收訊息。

WCF 會提供此處理序的基底類別協助程式 (如需本主題討論的通道協助程式類別圖表,請參閱通道模型概觀)。

下列討論將以Transport: UDP 範例為基礎。

建立通道處理站y

``UdpChannelFactory 是衍生自 ChannelFactoryBase。範例會覆寫 GetProperty,以提供訊息編碼器之訊息版本的存取權。當狀態電腦進行轉換時,該範例也會覆寫 OnClose 以終止 BufferManager 的執行個體。

UDP 輸出通道

``UdpOutputChannel 會實作 IOutputChannel。建構函式會驗證引數,並根據傳進的 EndpointAddress 建構目的地 EndPoint 物件。

覆寫 OnOpen 後會建立用於將訊息傳送至此 EndPoint 的通訊端 (Socket)。

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);

然後在 Wire 上傳送產生的資料:

this.socket.SendTo(
  messageBuffer.Array, 
  messageBuffer.Offset, 
  messageBuffer.Count, 
  SocketFlags.None, 
  this.remoteEndPoint
);

請參閱

概念

開發通道