代码改变世界

WCF 第三章 信道 系列文章

2011-06-25 07:56  DanielWise  阅读(3042)  评论(0编辑  收藏  举报

上一篇我们主要讲述了构筑WCF的基础,即契约,包括数据契约、消息契约;以及在契约基础上的不同通信模型,包括单向通信,请求-回复通信、双工通信。其底层是通过WSDL描述服务终结点,XSD描述数据。定义在WSDL中的服务操作用来在运行时把收到的请求转发给正确的.NET类,定义在XSD中的XML文件在运行时被反序列化成.NET类型并发送给服务操作。而这一起提供了对服务实现中.NET类型的一种基于标准的实现。

现在我们主要讲述WCF通信过程中的信道,即管道,就是消息在哪里发送/接受的。很多信道放到一起组成信道栈,信道栈是处理消息的分层通信展,相当于TCP/IP七层协议。

[第1篇] 基础

信道就是WCF应用程序接收和发送所有信息的通道。它负责在一个持续的方式中准备并传输消息。信道是为传输,协议和消息交换定义的。信道被放到一起来创建信道栈。信道栈是处理消息的分层通信栈。比如,一个信道栈可以由一个TCP传输信道和一个事务协议信道组成。这样的一个信道栈允许使用在网络中的客户端和服务端之间使用TCP协议和事务流转来发送/接收消息。

[第2篇] 信道形状

WCF支持不同的消息交换模式:单向,双工和请求-回复。为了实现每种方式,WCF提供了10种不同的称作信道形状的接口。其中五个形状称作IOutputChannel, IInputChannel, IDuplexChannel, IRequestChannel和IReplyChannel.每个形状都有一个等效的支持会话的形状。它们包括IOutputSessionChannel, IInputSessionChannel, IDuplexSessionChannel, IRequestSessionChannel和IReplySessionChannel.这些接口在一个信道栈中实现了不同的消息交换模式。在这一部分,我们将查看每一个通信模式以及与它们关联的多种接口。

[第3篇] 操作契约和信道形状

信道通过信道形状来完成它们所支持的多种类型消息交换模式。比如,一个基于Tcp的传输信道将会实现IInputChannel和IOutputChannel,因为这些通道都是固有单向的。其他的传输信道基于其他协议比如TCP可能需要实现多个信道形状。开发人员不直接与信道形状打交道。对应的,WCF选择一个服务的基于OperationContract的信道形状。表3.1列出了多个你可以在OperationContract上设置的影响信道形状结果的属性。注意大多数信道形状有一个无状态的(默认)和会话感知变量。会话感知信道从客户端传输一个识别标识给服务端。这可以用来维护客户端和服务端的状态。就像ASP.NET中的状态管理那样。WCF内建没有状态管理特性,但是你可以使用实例化的会话来管理状态。实例管理会在第五章”行为”中描述。

[第4篇]ICommunicationObject

ICommunicationObject 接口是WCF中所有通信对象(信道,信道工厂,信道监听器,等等)的基础。打算创建自定义信道或者直接使用信道的开发人员需要了解这个接口。WCF中的通信对象需要实现一个特殊的状态机。状态机表示了所有通信对象的状态变化。这种情况就像其他通信对象(比如,套接字)所处理的那样。ICommunicationObject接口(还有与它相关联的方法,状态和事件)的目的是为了实现状态机。这允许WCF能够将按同样的方式处理通信对象,并让他们下层实现与抽象层分离。

[第5篇] 总结

信道栈是由一个或者多个信道组成用来处理消息的分层通信栈。信道可以是协议信道或者传输信道。传输信道位于信道栈的最底层用来在一个传输协议(比如,HTTP,TCP,MSMQ)上传输消息。协议信道(又名层次信道)通转发和修改消息来实现协议(安全,可信赖消息,事务,等等)。