1. 基于HTTP的绑定
BasicHttpBinding、WSHttpBinding、WSDualHttpBinding和WSFederationHttpBinding选项适合于通过XML Web服务协议提供契约类型。显然,如果需要使该服务可适用于更多场合(多种操作系统和多种编程语言),这些就是需要关注的绑定,因为所有这些绑定类型都基于XML表示编码数据并且使用HTTP传送数据。
在表25-3中,注意到可以在代码中表示WCF绑定(通过System.ServiceModel名称空间中的类类型),或者作为在*.config文件中定义的XML属性表示WCF绑定。
表25-3 以HTTP为中心的WCF绑定
绑 定 类 | 绑 定 元 素 | 实 际 含 义 |
BasicHttpBinding | <basicHttpBinding> | 用于绑定符合WS-Basic Profile (WS-I Basic Profile 1.1)的WCF 服务。该绑定使用HTTP作为 传送方式,并且使用Text/XML 作为默认消息编码 |
WSHttpBinding | <wsHttpBinding> | 类似于BasicHttpBinding,但是 提供了更多的Web服务特性。 该绑定添加对事务、可靠消息发 送和WS-Addressing的支持 |
WSDualHttpBinding | <wsDualHttpBinding> | 类似于WSHttpBinding,但是用 于与双向契约结合使用(例如, 服务和客户可以来回发送消息)。 该绑定只支持SOAP安全性,并 且需要可靠的消息发送 |
WSFederationHttpBinding | <wsFederationHttpBinding> | 安全的和可互操作的绑定,该绑定 支持WS-Federation协议,并且允 许位于联盟内的组织有效地验 证和授权用户 |
如同其名称所建议的那样,BasicHttpBinding是所有以Web服务为中心的协议中最简单的协议。特别是,该绑定将确保WCF服务符合由WS-I定义的名为WS-I Basic Profile 1.1的规范。使用这种绑定的主要原因是维护对以前构建用于与ASP.NET Web服务通信的应用程序的向后兼容性(从1.0版本以来,ASP.NET Web服务已经成为.NET库的一部分)。
WSHttpBinding协议不仅集成了对WS-*规范(事务、安全性和可靠会话)子集的支持,而且支持使用消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)处理二进制数据编码的能力。
WSDualHttpBinding的主要优点是它添加了允许调用者和发送方使用双向消息发送(duplex messaging)通信的能力,这是一种表示调用者和发送方可以参加双向会谈的流行方法。在选择WSDualHttpBinding时,可以与WCF发布/订阅事件模型建立关联。
最后,WSFederationHttpBinding是基于Web服务的协议,在安全性最为重要时就需要使用该协议。该绑定支持WS-Trust、WS-Security和WS-SecureConversation规范,通过WCF CardSpace API表示这些规范。
2. 基于TCP的绑定
如果正在构建一个分布式系统,该系统涉及使用.NET 3.0/3.5库配置的一组连网机器(换句话说,所有机器都运行Windows XP、Windows Server 2003或Windows Vista),就可以通过绕开Web服务绑定并选择使用TCP绑定来增强性能,TCP绑定确保以紧凑二进制格式(而不是XML)编码所有数据。同样,在使用如表25-4所示的绑定时,客户和主机必须是.NET应用程序。
表25-4 以TCP为中心的WCF绑定
绑 定 类 | 绑 定 元 素 | 实 际 含 义 |
NetNamedPipeBinding | <netNamedPipeBinding> | 用于相同机器上不同.NET 应用程序之间通信的安全的、 可靠的、优化的绑定 |
NetPeerTcpBinding | <netPeerTcpBinding> | 为对等(P2P)网络应用程序 提供安全的绑定 |
NetTcpBinding | <netTcpBinding> | 适合于不同机器上.NET 应用程序之间通信的 安全的、优化的绑定 |
NetTcpBinding类使用TCP在客户和WCF服务之间移动二进制数据。前面提及,这将导致比Web服务协议更佳的性能,但是只限于内部应用程序解决方案。此外,NetTcpBinding支持事务、可靠的会话和安全的通信。
类似于NetTcpBinding,NetNamedPipeBinding支持事务、可靠的会话和安全的通信,但是它不能够执行跨机器的调用。如果您正在寻找在相同机器上的WCF应用程序之间推动数据(例如,跨越应用程序的域通信)的最快速方法,NetNamedPipeBinding绑定就是最佳的选择。至于NetPeerTcpBinding,可查阅.NET Framework 3.5 SDK文档以了解关于P2P连网的细节。
3. 基于MSMQ的绑定
最后,如果尝试集成Microsoft MSMQ服务器,则可以立刻想到使用NetMsmqBinding和MsmqIntegrationBinding绑定。本章中不会介绍使用MSMQ绑定的细节,但是表25-5归档了每个MSMQ绑定的基本作用。
表25-5 以MSMQ为中心的WCF绑定
绑 定 类 | 绑 定 元 素 | 实 际 含 义 |
MsmqIntegrationBinding | <msmqIntegrationBinding> | 该绑定可用于允许 WCF应用程序向已有的 MSMQ应用程序发送 消息以及从这种应用程 序接收消息,这种应用 程序使用COM、 本地C++或定义在 System.Messaging名称 空间中的类型 |
NetMsmqBinding | <netMsmqBinding> | 这个排队的绑定适合 于不同机器上的 .NET应用程 序之间的通信 |