共用方式為


服務:通道接聽程式與通道

通道物件共有下列三種類別:通道、通道接聽程式和通道處理站。通道是介於應用程式與通道堆疊之間的介面。通道接聽程式負責建立接收 (或接聽) 端的通道,一般用來回應新傳入的訊息或連線。通道處理站負責建立傳送端的通道,以初始化與端點的通訊。

通道接聽程式與通道

通道接聽程式負責建立通道並接收來自網路或下一層的訊息。接收到的訊息會透過通道接聽程式所建立的通道傳遞至上一層。

下列圖表會說明接收訊息與將之傳遞至上一層的處理序。

通道接聽程式與通道

儘管實作時也許不會真的用到佇列,在概念上處理序還是可以做成位於每個通道內部的佇列模型。通道接聽程式負責接收來自下一層或網路的訊息,並將其放到佇列中。通道負責從佇列取得訊息,並在上一層要求訊息時,將它交給上一層,例如呼叫通道上的 Receive

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

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

建立通道接聽程式

範例實作的 UdpChannelListener 係衍生自 ChannelListenerBase 類別。它會使用單一 UDP 通訊端來接收資料包。OnOpen 方法會透過非同步迴圈的 UDP 通訊端來接收資料,然後透過下列訊息編碼系統將資料轉換為訊息:

message = UdpConstants.MessageEncoder.ReadMessage(
  new ArraySegment<byte>(buffer, 0, count), 
  bufferManager
);

由於相同的資料包通道代表來自幾個來源的訊息,因此 UdpChannelListener 是單一接聽程式。與此接聽程式相關聯的作用中 IChannel 一次最多只有一個。只有當 AcceptChannel 方法所傳回的通道被接著處理後,範例才會產生另一個通道。一旦收到訊息,就會加入此單一通道佇列中。

UdpInputChannel

``UdpInputChannel 類別會實作 IInputChannel。它包含由 UdpChannelListener 通訊端所填入的傳入訊息佇列。這些訊息佇列會由 Receive 方法加以清除。