通道模型概述
通道堆栈是具有一个或多个消息处理通道的分层的通信堆栈。堆栈底部是传输通道,它负责使通道堆栈适应基础传输(例如,TCP、HTTP、SMTP 和其他类型的传输)。通道为消息的发送和接收提供了一个低级编程模型。此编程模型依赖于多个接口和其他类型模型(统称为 WCF 通道模型)。
源文档 <http://msdn.microsoft.com/zh-cn/library/ms729840(v=VS.100).aspx>
通道堆栈
底部通道称为传输通道。它是负责与其他方之间发送和接收消息的通道。这包括负责在与用于和其他方通信的格式之间转换 Message 对象。传输通道上面可以有任意个协议通道,每个协议通道负责提供一种通信功能(如可靠的传递保证)。协议通道对以 Message 对象的形式流过其中的消息执行操作。协议通道通常会转换消息(例如,通过添加标头或加密正文),或者发送和接收协议通道自己的控制消息(例如回执确认)。
通道形状
每个通道均实现一个或多个接口,称为通道形状接口或通道形状
。通道形状的最底部是 IChannel 接口,该接口提供一个 GetProperty<T> 方法,用作访问由堆栈中的通道公开的任意功能的分层机制。扩展 IChannel 的五种通道形状。
- IInputChannel :单一消息传递
- IOutputChannel
- IRequestChannel 请求答复
- IReplyChannel
- IDuplexChannel 双工通信
另外,这些形状中的每个形状均有一个扩展 System.ServiceModel.Channels.ISessionChannel 以支持会话的等效项。这些等效项是:
- IInputSessionChannel
- IOutputSessionChannel
- IRequestSessionChannel
- IReplySessionChannel
- IDuplexSessionChannel
通道堆栈的编程
通道堆栈通常是使用工厂模式创建的,在这种模式中,绑定创建通道堆栈。在发送端,使用绑定生成 ChannelFactory,而后者生成通道堆栈并返回对堆栈中顶部通道的引用。之后,应用程序可以使用此通道发送消息
在接收端,使用绑定生成 IChannelListener,用于侦听传入消息。IChannelListener 通过创建通道堆栈并将应用程序引用传递给顶部通道,将消息提供给侦听应用程序。之后,应用程序使用此通道接收传入消息。
通道对象模型
通道对象模型是实现通道、通道侦听器和通道工厂所必需的一组核心接口。还提供一些基类以辅助自定义实现。
ICommunicationObject 是定义所有通信对象实现的基本状态机的核心接口。CommunicationObject 提供了此核心接口的实现,可以从此实现派生其他通道类而不必重新实现接口。但这并不是必需的:自定义通道可以直接实现 ICommunicationObject 而不继承自 CommunicationObject。
一种由六种可用状态,分别为Opening,Created,Opened,Closing,Closed和Faulted,随着系统的运行状态会改变,
服务端通道代码:
客户端通道代码: