网络通信离不开网络协议的支持,在WCF中,给发开人员提供了很多传输协议进行绑定。比如:BasicHttpBinding,NetTcpBinding,WSHttpBinding 等等。对于初学者来说,很容易就被多种协议弄迷糊,不知道什么样的情况用哪个协议,这里就简单的说下。希望对新手学习WCF有帮助。
其实我也是在一边学习一边总结,前些天写了两个WCF服务,但是通过VS2008调用的时候,配置文件中的Binding却出现了两种不同的情况:
一个服务提供一个方法,用于返回一个数据集DataSet,添加服务引用时,Web.config中:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif?x-oss-process=image/resize,w_1400/format,webp)
<endpoint address="http://gao/WcfService1/Service1.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
name="WSHttpBinding_IService1">
另一个服务提供一个方法,返回的是一个集合List,Web.config中:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif?x-oss-process=image/resize,w_1400/format,webp)
<endpoint address="http://gao/SLGetDataByAdoWeb/SLGetDataWCF.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISLGetDataWCF"
contract="ServiceReference2.ISLGetDataWCF" name="BasicHttpBinding_ISLGetDataWCF" />
两个返回值不同的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对我的指导和帮助。有什么不正确的地方还希望大家指正。
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2011/08/08/2131071.html,如需转载请自行联系原作者