首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 技術內幕(39):通道管理器——通道工廠與章節總結

     編輯:關於.NET

發送端的核心:通道工廠

通道工廠位於發送端,負責建立通道。與通道偵聽器相似,但無需被動等待訊息,而是主動透過 CreateChannel 建立連線通道。每種傳輸通道皆有對應工廠,支援 WS-* 協議的通道亦同。使用者代碼無法直接實例化,必須透過 Binding(第 8 章詳述)創建。所有工廠繼承自 ChannelManagerBase。

核心介面體系

IChannelFactory

基礎介面,繼承 ICommunicationObject,強制實作狀態機,提供 GetProperty<T>() 查詢機制。

IChannelFactory<TChannel>

泛型介面,繼承 IChannelFactory,定義兩個 CreateChannel 多載:

  • CreateChannel(EndpointAddress to)
  • CreateChannel(EndpointAddress to, Uri via)

to 為訊息最終目的地,via 為實際連線位址(中間可能經轉發)。

基底類別架構

ChannelFactoryBase

抽象類別,繼承 ChannelManagerBase、實作 IChannelFactory。提供開啟/關閉/傳送/接收逾時屬性的自訂方式,對應 ChannelListenerBase 的發送端對應物。

ChannelFactoryBase<TChannel>

通道工廠真正基類,繼承 ChannelFactoryBase、實作 IChannelFactory<TChannel>。關鍵成員:

  • 建構子實例化管理通道的內部物件,確保工廠關閉/中止時,所建通道狀態機同步變更
  • ValidateCreateChannel():僅允許 CommunicationState.Opened 狀態建立通道,否則拋 InvalidOperationException
  • 受保護抽象方法 OnCreateChannel:子類別實作具體建立邏輯

實戰:建立自訂委派通道工廠

延續 DelegatorChannel 範例,建立泛型 DelegatorChannelFactory<TShape>:

  • 建構子接收 BindingContext,透過 BuildInnerChannelFactory<TShape>() 取得內層工廠
  • 私有 WrapChannel 方法:根據 TShape 將內層通道包裝為對應 DelegatorXxxChannel
  • 覆寫 OnCreateChannel:呼叫內層工廠建立通道,再包裝回傳
  • 狀態機方法(OnOpen、OnClose、OnAbort 等)委派給內層工廠
  • GetProperty<T>() 透傳查詢

章節總結

  • WCF 透過通道工廠(發送端)與通道偵聽器(接收端)建立通道
  • 兩者架構模仿 Berkeley Sockets API
  • 執行時組裝成堆疊,堆疊中每個管理器建立一個通道
  • 傳輸層工廠/偵聽器必須位於堆疊底部
  • 使用者代碼不可直接實例化,由 BindingElement 負責
  • 完整程式碼需結合第 8 章 Binding 才能執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved