通道工廠位於發送端,負責建立通道。與通道偵聽器相似,但無需被動等待訊息,而是主動透過 CreateChannel 建立連線通道。每種傳輸通道皆有對應工廠,支援 WS-* 協議的通道亦同。使用者代碼無法直接實例化,必須透過 Binding(第 8 章詳述)創建。所有工廠繼承自 ChannelManagerBase。
基礎介面,繼承 ICommunicationObject,強制實作狀態機,提供 GetProperty<T>() 查詢機制。
泛型介面,繼承 IChannelFactory,定義兩個 CreateChannel 多載:
CreateChannel(EndpointAddress to)CreateChannel(EndpointAddress to, Uri via)to 為訊息最終目的地,via 為實際連線位址(中間可能經轉發)。
抽象類別,繼承 ChannelManagerBase、實作 IChannelFactory。提供開啟/關閉/傳送/接收逾時屬性的自訂方式,對應 ChannelListenerBase 的發送端對應物。
通道工廠真正基類,繼承 ChannelFactoryBase、實作 IChannelFactory<TChannel>。關鍵成員:
ValidateCreateChannel():僅允許 CommunicationState.Opened 狀態建立通道,否則拋 InvalidOperationExceptionOnCreateChannel:子類別實作具體建立邏輯延續 DelegatorChannel 範例,建立泛型 DelegatorChannelFactory<TShape>:
BindingContext,透過 BuildInnerChannelFactory<TShape>() 取得內層工廠WrapChannel 方法:根據 TShape 將內層通道包裝為對應 DelegatorXxxChannelOnCreateChannel:呼叫內層工廠建立通道,再包裝回傳OnOpen、OnClose、OnAbort 等)委派給內層工廠GetProperty<T>() 透傳查詢BindingElement 負責Binding 才能執行