[WCF的Binding模型]之四:信道工廠(Channel Factory)

作者: Artech  來源: 博客園  發布時間: 2008-12-15 12:24  閱讀: 3602 次  推薦: 0   原文鏈接   [收藏]  

由于信道管理器在客戶端和服務端所起的不同作用,分為信道監聽器和信道工廠。和服務端的信道監聽其相比,處于客戶端的信道工廠顯得簡單。從名稱就可以看得出來,信道工廠的作用就是單純的創建用于消息發送的信道。我們先來看看與信道工廠相關的一些接口和基類的定義。

一、信道工廠相關的接口和基類

對于信道監聽器,WCF定義了兩個接口:IChannelListener和IChnnelListener。與之相對地,WCF也為信道工廠定義了兩個接口:IChannelFactory和IChannelFactory。這兩個接口定義了信道工廠最基本的功能和屬性,下面是這兩個接口的定義:

public interface IChannelFactory : ICommunicationObject
{

  // Methods

  T GetProperty<T>() where T : class;

}

public interface IChannelFactory<TChannel> : IChannelFactory, ICommunicationObject
{

  // Methods

  TChannel CreateChannel(EndpointAddress to);

  TChannel CreateChannel(EndpointAddress to, Uri via);

 }

 

由于信道工廠的目的就是單純的創建信道,所以IChannelFactory和IChannelFactory的定義顯得格外簡潔。兩個重載的CreateChannel方法通過目的終結點的地址(to),以及在手工尋址下不同于目的終結點地址的另一個地址,該地址是消息實際會被發送的地址(via)。關于To和Via可以參考第二章關于物理地址和邏輯地址的部分。

除了上面的兩個接口之外,WCF還定義分別是實現了它們的兩個抽象基類:ChannelFactoryBase和ChannelFactoryBase。ChannelFactoryBase繼承自所有信道管理器的基類:CnannelManagerBase,而ChannelManagerBase又繼承自CommunicationObject,實現ICommunicationObject接口定義的基本的狀態屬性和狀態轉換功能。并且實現了接口IChannelFactory和ICommunicationObject。而ChannelFactoryBase繼承自CnannelManagerBase,并且實現了接口:IChannelFactory, IChannelFactory和ICommunicationObject。一般地,范型類型TChannel為基于相應channel shape下客戶端信道類型,比如IOutputChannel、IRequestChannel和IDuplexChannel。ChannelFactoryBase和ChannelFactoryBase的簡單定義如下:

public abstract class ChannelFactoryBase : ChannelManagerBase, IChannelFactory, 
ICommunicationObject
{
     
}

public abstract class ChannelFactoryBase<TChannel> : ChannelFactoryBase, 
IChannelFactory<TChannel>, IChannelFactory, ICommunicationObject
{
     
} 

 

下面的類圖簡明直觀的表述了WCF中關于信道工廠的體系結構。

image

二、案例演示:如何自定義信道工廠

在上一個案例中,我們創建了一個自定義的信道監聽器:SimpleReplyChannelListner。該信道監聽器用于在請求-回復消息交換模式下進行請求的監聽。在本案例中,我們來創建與之相對的信道工廠:SimpleChannelFactory,用于請求-回復消息交換模式下進行用于請求發送信道的創建。由于SimpleChannelFactory的實現相對簡單,將所有代碼一并附上。

SimpleChannelFactory直接繼承自抽象基類SimpleChannelFactoryBase。字段成員_innerChannelFactory表示信道工廠棧中后一個信道工廠對象,該成員在構造函數中通過傳入的BindingContext對象的BuildInnerChannelFactory方法創建。OnCreateChannel是核心大方法,實現了真正的信道創建過程,在這里我們創建了我們自定義的信道:SimpleRequestChannel.。構建SimpleRequestChannel. 的InnerChannel通過­­­_innerChannelFactory的CreateChannel方法創建。對于其他的方法(OnOpen、OnBeginOpen和OnEndOpen),我們僅僅通過PrintHelper輸出當前的方法名稱,并調用­_innerChannelFactory相應的方法。

SimpleChannelFactory

 

WCF中的綁定模型:
[WCF中的Binding模型]之一: Binding模型簡介
[WCF中的Binding模型]之二: 信道與信道棧(Channel and Channel Stack)
[WCF中的Binding模型]之三:信道監聽器(Channel Listener)
[WCF中的Binding模型]之四:信道工廠(Channel Factory)
[WCF中的Binding模型]之五:綁定元素(Binding Element)
[WCF中的Binding模型]之六:從綁定元素認識系統預定義綁定

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()