代码改变世界

WCF 第三章 信道

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

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

信道栈的目标是把一条消息转成与发送方,接收方兼容的线上格式并传输这条消息。有两种类型的信道用来做这个: 传输信道和协议信道。传输信道总是位于信道栈的最底端,它使用一个传输协议来传输消息。WCF提供了很多传输协议,包括HTTP,TCP,MSMQ,P2P和命名管道。协议信道位于传输信道或者其他协议信道的上层。因为协议信道在其他信道的上层,它们通常也被称为分层信道。协议信道通过传输和修改消息来实现线上级别的协议。WCF提供了很多种类型的协议信道。包括实现对安全,事务和可信赖消息支持的协议信道。

提示 传输信道

WCF提供了数种传输信道,包括HTTP,TCP,MSMQ,P2P和命名管道。其他协议在样例中也包括或者通过第三方来提供更广泛的协议支持,包括SMTP,FTP,UDP,WebSphere MQ和SQL Service Broker.这些协议中的很多种都可以在http://wcf.netfx3.com 站点找到。UDP协议信道可以从Windows SDK中找到。WebSphere MQ传输信道协议可以从IBM的alphaWorks站点找到。

对将要进行的通信过程来说,客户端和服务端都需要初始化一个与对方兼容的信道栈。在.NET 应用程序之间,这一般通过在客户端和服务端上使用同样的信道栈来完成。通常,这意味着它们的接口必须匹配。我们使用绑定来简化信道栈的创建过程。一个绑定或者信道栈的配置信息并知道如何在运行时创建信道栈。绑定从一个绑定元素集合上创建,绑定元素集合表示信道栈中的信道。绑定和绑定元素将会在第四章“绑定”中详细介绍。

通过允许通信从应用程序中剖离,WCF信道结构提供了巨大的灵活性。这允许开发人员创建可以在多个通信结构中暴露的服务,也允许应用程序服务在需求改变时改变。比如,一个在两个.NET应用之间暴露的一个WCF服务可以很容易的暴露给JAVA应用程序而不用改动程序。额外的特性,比如互通性,持久通信和事务也可以很容易得根据需求变化加入到WCF服务中。先前的微软技术(比如ASP.NET Web Services, .NET Remoting, Enterprise Services或者MSMQ)需要你为每一个新的通信形式重写应用程序部分。通过WCF,你可以不用对应用程序做重大的重写同时随意挑选和选择你需要的特性。

WCF提供这样灵活性的能力可以从WCF如何使用分层来暴露一个信道栈中找到。图片3.1 显示了消息通过在一个给定协议的客户端信道栈上从一个WCF客户端应用程序传输到服务端。服务端信道栈监听消息并把它们分发给服务端应用程序。

一个信道栈是一系列使用绑定元素配置的信道。一个预先配置的信道栈也称作一个绑定。一个绑定由一系列绑定元素组成,就好像一个信道栈由一系列信道组成。在信道栈的上层是协议信道。协议信道与一条消息交互并负责安全,可信赖通信,事务和日志等特性。在一个信道栈中可以有任意多个信道栈,这取决于需要的特性。

传输信道负责在一个传输协议比如TCP或者HTTP上发送字节。它们也负责使用一个编码器把消息转换成字节数组然后传输。把一条消息从它的XML表现转成一个字节数组是编码器的工作。编码器通过绑定元素把自己暴露给传输信道。传输信道在绑定上下文中寻找一个MessageEncoder类的实现。如果没有找到,传输信道会被确定为一个默认的编码器。

提示 信道栈有一个传输信道和一个编码信道

信道栈至少有一个传输信道和一个编码信道。通常传输信道会确认一个默认使用的编码。比如tcpTransport传输信道,它确定使用binaryMessageEncoding来编码。这是在WCF中实现一个信道栈的所有必需条件。协议信道是可选的当你使用一个信道栈时。