[WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[1] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[2] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[3] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[4] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[2] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[3] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
[4] [WCF中的Binding模型]之二: 信道与信道栈(Channel and Channel Stack)
2. IChannel和ChannelBase
WCF中信道层中的每种类型的信道直接或者间接实现了接口System.ServiceModel.Channels.IChannel,IChannel的定义异常简单,仅仅具有一个唯一范型方法成员:GetProperty()。
public interface IChannel : ICommunicationObject { // Methods T GetProperty() where T : class; }
通过调用信道对象GetProperty方法,获得具有范型类型的属性。这个方法比较重要,因为它是探测信道是否具有某种能力的一种有效的方法。比如我们可以通过该方法,指定相应的范型类型,确定信道是否支持某种Channel Shape(关于channel shape将在接下来的部分中进行介绍),消息版本和安全模式等等。
除了IChannel接口之外,WCF还定义了一个实现了IChannel接口的基类:System.ServiceModel.Channels.ChannelBase。。除了实现了IChannel接口,ChannelBase还实现了另外两个接口:ICommnucationObject和IDefaultCommunicationTimeouts,并直接继承自CommnucationObject。
public abstract class ChannelBase : CommunicationObject, IChannel, ICommunicationObject, IDefaultCommunicationTimeouts { public virtual T GetProperty() where T : class; //... ... TimeSpan IDefaultCommunicationTimeouts.CloseTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.OpenTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.ReceiveTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.SendTimeout { get; } }