WCF技术剖析(卷1)
上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; }
        }