上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.3.2 IChannel和ChannelBase
WCF信道层中每种类型的信道直接或间接实现了接口System.ServiceModel.Channels.IChannel,IChannel的定义异常简单,仅仅具有一个唯一泛型方法成员:GetProperty<T>()。
public interface IChannel : ICommunicationObject { T GetProperty<T>() where T : class; }
通过调用信道对象GetProperty<T>方法,获得具有泛型类型的属性。这个方法比较重要,因为它是探测信道是否具有某种能力或特性的一种有效的方法。比如可以通过该方法,指定相应的泛型类型,确定信道是否支持某种消息版本和安全模式等。
除了IChannel接口之外,WCF还定义了一个实现了IChannel接口的基类:System.ServiceModel.Channels.ChannelBase。除了实现了IChannel接口,ChannelBase还实现了上面介绍的另外两个接口:ICommnucationObject和IDefaultCommunicationTimeouts,并直接继承自CommunicationObject。
public abstract class ChannelBase : CommunicationObject, IChannel, ICommunicationObject, IDefaultCommunicationTimeouts { //其他成员 public virtual T GetProperty<T>() where T : class; TimeSpan IDefaultCommunicationTimeouts.CloseTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.OpenTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.ReceiveTimeout { get; } TimeSpan IDefaultCommunicationTimeouts.SendTimeout { get; } }