第四章 Binding
第三章讲解了Channels,Channel栈是一个分层的通信栈,它是由一个或多个Channel组成用来处理消息。Binding是Channel栈的预定义。它代表了在客户端和服务端间的线性规则。每个binding指定了参与通信的传输,编码,协议。WCF使用binding封装各种通信方案的配置。多数常用的通信方案,比如WebService,Rest/POXService,和Queue-based它们都是运行在基于ASP.Net WebService或WS-I基本规范1.1。ws2007HttpBinding、wsHttpBinding和basicHttpBinding十分相似,但是它俩支持更多的特性,比如可靠报文发送和事务,并使用了更新的标准比如WS-Addressing。ws2007HttpBinding由.Net3.5承载,并且采用了比wsHttpBinding更新的标准。表4.1列出了通信使用的12种binding和每个binding的细节。
表4.1 .NET3.5中的WCF通信binding
Binding名 | 描述 | .Net Framework |
basicHttpBinding | 绑定基于WS-IBasicProfile 1.1 和 ASMX 的 Web 服务 | 3.0/3.5 |
wsHttpBinding | 基于最新的WS*的WEB服务,比如WS-Security,WS-Transactions等
| 3.0/3.5 |
wsDualHttpBinding | 使用双工契约绑定支持双向通信 | 3.0/3.5 |
webHttpBinding | 支持REST/POS-based服务,并使用XML和JSON序列化 | 3.0/3.5 |
netTcpBinding | 在两个基于.Net平台的系统间通信 | 3.0/3.5 |
netNamedPipeBinding | 单机中一个或多个基于.net的系统间通信
| 3.0/3.5 |
netMsmqBinding | 使用MSMQ进行异步通信 | 3.0/3.5 |
netPeerTcpBinding | 用来构建点对点的网络程序 | 3.0/3.5 |
msmqIntegrationBinding | 使用MSMQ发送和接受消息序列 | 3.0/3.5 |
wsFederationHttpBinding | 使用联邦认证提供基于WS*的web服务 | 3.0/3.5 |
ws2007HttpBinding | 继承自wsHttpBinding并扩展支持了基于2007年标准的最新WS* | 3.5 |
ws2007FederationHttpBinding | 继承自wsFederationHttpBinding并扩展支持了基于2007年标准的最新WS* | 3.5 |
Binding名 | 描述 | .Net Framework |
basicHttpBinding | 绑定基于WS-IBasicProfile 1.1 和 ASMX 的 Web 服务 | 3.0/3.5 |
wsHttpBinding | 基于最新的WS*的WEB服务,比如WS-Security,WS-Transactions等
| 3.0/3.5 |
wsDualHttpBinding | 使用双工契约绑定支持双向通信 | 3.0/3.5 |
webHttpBinding | 支持REST/POS-based服务,并使用XML和JSON序列化 | 3.0/3.5 |
netTcpBinding | 在两个基于.Net平台的系统间通信 | 3.0/3.5 |
netNamedPipeBinding | 单机中一个或多个基于.net的系统间通信
| 3.0/3.5 |
netMsmqBinding | 使用MSMQ进行异步通信 | 3.0/3.5 |
netPeerTcpBinding | 用来构建点对点的网络程序 | 3.0/3.5 |
msmqIntegrationBinding | 使用MSMQ发送和接受消息序列 | 3.0/3.5 |
wsFederationHttpBinding | 使用联邦认证提供基于WS*的web服务 | 3.0/3.5 |
ws2007HttpBinding | 继承自wsHttpBinding并扩展支持了基于2007年标准的最新WS* | 3.5 |
ws2007FederationHttpBinding | 继承自wsFederationHttpBinding并扩展支持了基于2007年标准的最新WS* | 3.5 |
表4.1列出的binding可在代码和配置文件中指定。清单4.1展示了在配置中指定basicHttpBinding。配置文件是开发人员可以灵活的改变和修改程序,从而不需要重新编译。
清单4.1 在配置中使用binding
----------------------------------------------
<?xml version="1.0" encoding="utf-8">
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://localhost/helloworld"
binding="basicHttpBinding"
contract="EssentialWCF.HelloWorld">
</endpoint>
</client>
</system.serviceModel>
</configuration>
----------------------------------------------
清单4.2展示了BasicHttpBinding的类。开发人员可以使用代码绑定,但以后就不能修改了。
清单4.2 代码中使用Binding
----------------------------------------------
----------------------------------------------
通过一个binding元素集合,绑定构成了Channel栈,在Channel栈中的binding元素代表了一个channel对象。每个binding,比如basicHttpBinding,由许多binding元素组成,你可以认真查看示例化binding并枚举了binding元素集合的代码。清单4.3展示了这个。
清单4.3 检查BindingElementCollction
----------------------------------------------
----------------------------------------------
图4.1 显示了清单4.3输出的四种绑定,我们将着重审视wsHttpBinding这样我们就能理解绑定的Binding元素结构。
WSHttpBinding默认有四个binding元素:HttpTransportBindingElementTestMessageEncodingBindElement,SymmetricSecurityBindingElement,
TransactionFlowBindingElement。这些binding元素允许通过HTTP协议,基于文本的消息编码,安全,和事务的方式来通信。注意,这个binding元素列表是默认配置。绑定可以添加或删除binding元素。
图4.1 绑定输出
注意,由一个或多个binding元素组成的绑定,它们有些有相同的binding元素。比如,WSHttpBinding和BasicHttpBinding都使用了HttpTransportBindingElement。这两个绑定使用同样的传输机制,但是在功能上和他们的支持程度是不同的。本章我们讨论这些不同。
本章的最后我们将关注WebService,多机,单机和基于队列的通信。开发人员应该知道如何用WCF创建这些通信。其中有些是基于REST/POX,peer networking,和联邦安全,这些东西的细节在第13章描述。