学习 WCF (5)--学习Binding的使用

  网络通信离不开网络协议的支持,在WCF中,给发开人员提供了很多传输协议进行绑定。比如:BasicHttpBinding,NetTcpBinding,WSHttpBinding 等等。对于初学者来说,很容易就被多种协议弄迷糊,不知道什么样的情况用哪个协议,这里就简单的说下。希望对新手学习WCF有帮助。

  其实我也是在一边学习一边总结,前些天写了两个WCF服务,但是通过VS2008调用的时候,配置文件中的Binding却出现了两种不同的情况:

一个服务提供一个方法,用于返回一个数据集DataSet,添加服务引用时,Web.config中:

Code

另一个服务提供一个方法,返回的是一个集合List,Web.config中:

Code

两个返回值不同的WCF服务,在添加服务引用的时候却出现了不同的Binding,也不知道开发环境是通过什么自动生成的(高手指教)。更严重的是以wsHttpBinding为binding的服务在跨机器调用的时候会出现问题,看样子这个Binding的类型很值得研究一下。

WCF中的绑定

绑定描述了服务传输的通信方式,使用绑定可以指定:传输的协议,安全要求,编码方式,事务处理要求,可靠性等。

绑定包括多个绑定元素,他们描述了所有绑定要求,可以创建定制的绑定,也可以使用预定义绑定,如下:

    基本绑定(Basic Binding)

BasicHttpBinding类提供。基本绑定能够将WCF服务公开为旧的ASMX Web服务,使得旧的客户端能够与新的服务协作。如果客户端使用了基本绑定,那么新的WCF客户端就能够与旧的ASMX服务协作。

TCP绑定

NetTcpBinding类提供。TCP绑定使用TCP协议实现在Intranet中跨机器的通信。TCP绑定支持多种特性,包括可靠性、事务性、安全性以及WCF之间通信的优化。前提是,它要求客户端与服务都必须使用WCF。

对等网绑定

NetPeerTcpBinding类提供。它使用对等网进行传输。对等网允许客户端与服务订阅相同的网格(Grid),实现广播消息。因为对等网需要网格拓扑(Grid Topology)与网状计算策略(Mesh Computing Strategies)方面的知识。

IPC绑定

NetNamedPipeBinding类提供。它使用命名管道为同一机器的通信进行传输。这种绑定方式最安全,因为它不能接收来自机器外部的调用。IPC绑定支持的特性与TCP绑定相似。

Web服务(WS)绑定

WSHttpBinding类提供。WS绑定使用HTTP或HTTPS进行传输,为基于Internet的通信提供了诸如可靠性、事务性与安全性等特性。

WS联邦绑定(Federated WS Binding)

WSFederationHttpBinding类提供。WS联邦绑定是一种特殊的WS绑定,提供对联邦安全(Federated Security)的支持。

WS双向绑定(Duplex WS Binding)

WSDualHttpBinding类提供。WS双向绑定与WS绑定相似,但它还支持从服务到客户端的双向通信。

MSMQ绑定

NetMsmqBinding类提供。它使用MSMQ进行传输,用以提供对断开的队列调用的支持。

MSMQ集成绑定(MSMQ Integration Binding)

MsmqIntegrationBinding类提供。它实现了WCF消息与MSMQ消息之间的转换,用以支持与旧的MSMQ客户端之间的互操作。

不同的绑定支持不同的特性。以WS开头的绑定是独立于平台的,支持Web服务的规范。以Net开通的绑定使用的是二进制格式,使得.NET应用程序之间的通信有很好的性能。其他特性有支持会话,可靠的会话,事务处理和双向通信。

绑定的传输协议与编码格式

绑定与安全

这里有个不错的文章推荐给大家,可能对大家有帮助:http://msdn.microsoft.com/zh-cn/magazine/cc163382.aspx

绑定与可靠性

绑定协议名称            支持可靠性         默认可靠性           支持有序传递       默认有序传递

BasicHttpBinding                No               N/A                    No                  N/A

NetTcpBinding                   Yes               Off                    Yes                  On

NetPeerTcpBinding              No                N/A                   No                  N/A

NetNamedPipeBinding          No                N/A (On)           Yes                  N/A (On)

WSHttpBinding                  Yes               Off                    Yes                  On

WSFederationHttpBinding   Yes               Off                     Yes                  On

WSDualHttpBinding            Yes               On                     Yes                  On

NetMsmqBinding                 No                N/A                    No                   N/A

MsmqIntegrationBinding       No               N/A                    No                   N/A

WS绑定协议一般都提供了对可靠性传递的支持,可以编程或者配置方式在项目里启用。可靠性传输要根据绑定的目标场景而定。

绑定的合理使用

WCF为我们提供了这么多种预定义绑定,我们在开发中不同的场景应该应用哪个绑定呢?当然,我们有时可以不考虑,开发环境为我们自定的完成。但是如果我们手动的代码定义,那应该注意哪些呢?这里提出几点供大家参考:

1.BasicHttpBinding: 一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。
 
2.WSHttpBinding: 一个安全且可互操作的绑定,适合于非双工服务约定。
 
3.WS2007HttpBinding: 一个安全且可互操作的绑定,可为 Security, ReliableSession 的正确版本和 TransactionFlow 绑定元素提供支持。
 
4.WSDualHttpBinding: 一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。
 
5.WSFederationHttpBinding: 一个安全且可互操作的绑定,支持 WS 联合协议并使联合中的组织可以高效地对用户进行身份验证和授权。
 
6.WS2007FederationHttpBinding: 一个安全且可互操作的绑定,它派生自 WS2007HttpBinding 并支持联合安全性。
 
7.NetTcpBinding: 一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。
 
8.NetNamedPipeBinding: 一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。
 
9.NetMsmqBinding: 一个排队绑定,适用于 WCF 应用程序之间的跨计算机的通信。
 
10.NetPeerTcpBinding: 一个支持多计算机安全通信的绑定。
 
11.WebHttpBinding: 一个绑定,可用于为通过 HTTP 请求(而不是 SOAP 消息)公开的 WCF Web 服务配置终结点。
 
12.MsmqIntegrationBinding: 一个绑定,适用于 WCF 应用程序和现有消息队列(也称为 MSMQ)应用程序之间跨计算机的通信。
   
比较常见的就是BasicHttpBinding,主要兼容老的Web 服务。WSDualHttpBinding用来做WCF回调,IIS托管的时候使用的比较多。
NetTcpBinding,企业局域网内部通信,效率高,支持多种安全机制策略,MsmqIntegrationBinding,主要是做WCF消息队列相关的开发。

这里感谢老徐:http://frank_xl.cnblogs.com对我的指导和帮助。有什么不正确的地方还希望大家指正。

posted @ 2009-07-15 23:50  GWPBrian  阅读(4163)  评论(5编辑  收藏  举报