WCF技术内幕之通道管理器

        用户代码不能直接创建通道,这些工作由特定的工厂对象完成。虽然这些工厂对象不是通道,但也被认为是通道层的一部分。在WCF的类型系统中,通道工厂有其特殊的名字,这些名称与发送者和接收者的命名不同。在接收端,这些类型被称为通道侦听器。在发送端,这些类型被称为通道工厂。当两者放在一起的时候,它们被称为通道管理器。

接收者:通道侦听器

    通道侦听器就是用来创建通道并侦听传入的消息。通道侦听器处于堆栈的最底层。传输通道侦听器是唯一一个绑定地址并且开始侦听连接消息的通道。堆栈处于上面,通道侦听器会依次调用下一个通道侦听器的Accept方法,直到调用最底层的传输通道侦听器,如图7-1所示。


图7-1传输通道堆栈

    IChannelListener接口

        所有的通道都实现了System.ServicerModel.Channels.IChannelListener接口。这个接口会强制所有的通道实现通道状态机,并包含一些基本的通道侦听器成员。IChannelListener的定义如下:

public interface IChannelListener : ICommunicationObject
{
    IAsyncResult BeginWaitForChannel(TimeSpan timeout, AsyncCallback callback, object state);
    Boolean EndWaitForChannel(IAsyncResult result);
    Boolean WaitForChannel(TimeSpan timeout);
    T GetProperty<T>() where T:class;
    //侦听地址
    Uri Uri { get; }
}

    IChannelListener<TChannel>接口

        所有的通道同样也实现IChannelListener<TChannel>接口。这里会第一次看到伯克利Socket API的Accept范式,如下所示:

public interface IChannelListener<TChannel>:IChannelListener where TChannel : class, IChannel
{
    TChannel AcceptChannel();
    TChannel AcceptChannel(TimeSpan timeout);
    IAsyncResult BeginAcceptChannel(AsyncCallback callback, object state);
    IAsyncResult BeginAcceptChannel(IAsyncResult result);
}

        所有的通道侦听器都继承自抽象类型System.ServicerModel.Channels.ChannelListenerBase。通道侦听器也继承自抽象类型System.ServiceModel.Channels.ChannelListenerBase<TChannel>。这个类型是ChannelListenerBase的子类型,而且实现了IChannelListener<TChannel>接口。

发送者:通道工厂

    发送者使用通道工厂来创建通道。它们和通道侦听器的许多特性相似,不同的是它们驻留在发送者内部,而且不需要从连接上侦听消息。

    IChannelFactory接口

        所有的通道工厂都继承了IChannelFactory接口。这个接口实现了ICommunicationObject接口,因此,可以强制它的继承者实现通道状态机。当然还可以展示与通道和通道侦听器类似的一个查询机制。代码如下所示:

public interface IChannelFactory<TChannel> : IChannelFactory
{
    TChannel CreateChannel(EndpointAddress to);
    TChannel CreateChannel(EndpointAddress to, Uri via);
}
        通道工厂间接继承了抽象类型ChannelFactoryBase。概念上,它的作用与通道侦听器中使用的ChannelListenerBase类型一样。换句话说,ChannelListenerBase类型也提供了一种自定义打开、关闭、发送和接收消息超时属性的方式。ChannelFactoryBase<TChannel>类型继承了ChannelFactoryBase类型,而且实现了IChannelFactory<TChannel>接口。它也是通道工厂类型的基类。更进一步说,这个类型维护和控制通道的创建状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值