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

简介:

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

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

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


<endpoint address="http://gao/WcfService1/Service1.svc" binding="wsHttpBinding"
                bindingConfiguration
="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
                name
="WSHttpBinding_IService1">

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


<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,如需转载请自行联系原作者

目录
相关文章
|
12月前
|
网络协议 网络架构 Windows
框架学习——WCF框架
框架学习——WCF框架
254 0
|
安全 C#
WCF技术我们应该如何以正确的方式去学习掌握
一、WCF技术我该如何学习?       阿笨的回答是:作为初学者的我们,那么请跟着阿笨一起玩WCF吧,阿笨将带领大家如何以正确的姿势去掌握WCF技术。由于WCF技术知识点太多了,就纯基础概念性知识都可以单独出一本书来讲解,本次分享课程《C#面向服务编程技术WCF从入门到实战演练》开课之前,阿笨还是希望从没了解过WCF技术的童鞋们提前先了解一下WCF技术,至少要明白WCF技术的ABC三要素分别指的是什么。
1180 0
|
存储
跟着Artech学习WCF(3) wcf 的状态问题
开始以为是wcf的session问题 敲了一边代码发现里面没有用session存储数据 经过 自己研究才发现作者是再将wcf的状态存储问题 项目结构如下   代码如下 using System; using System.
695 0
|
机器学习/深度学习 消息中间件 开发框架
跟着Artech学习WCF(4) MSMQ 绑定
曾几何时 再看大家讨论各种构架时,经常出现在各个服务器间传递数据,经常出现MSMQ, 那是看到这个心理就郁闷,怎么整天折腾ASP.NET 就没遇见过这个东西 原来这个家伙藏在WCF里面 嘿嘿这次被我发现了 首先 第一次装IIS的话 默认是没有安装msmq 所以需要自己安装的   看Art...
796 0
|
XML 网络架构 数据格式
跟着Artech学习WCF(5) Responsive Service 与自定义Soap Message Header
记得以前看.NET各类框架教程在介绍SOAP时经常提到Soap Header 以前一直认为这个玩意就是个理论 应该和具体的编码和应用无关 后来在看到一些关于SOAP安全的书可以在header里 进行加密解密信息的存储 用于安全方面的验证 但一直苦于这个玩意到底是神马东西,一直没见过代码,今天A...
687 0
|
安全 Windows
跟着Artech学习WCF(2) netTcpBinding 绑定
netTcpBinding 绑定真是坑爹啊 因为一直围绕着iis的缘故 很少搞这个东西,这次计划系统的学习WCF 才搞的 没搞不知道一搞晕菜 配置了半天才弄好 最晕菜的是在省城代理类时 的地址 更晕菜 这次配置OK了 保存一下 以备他日不时之需 首先netTcpBinding是服务器端的配...
759 0
|
网络协议 安全 Windows
跟着Artech学习WCF(1)
折腾了老半天双向通信,不是端口绑定不上 就是创建代理失败要摸是 代理没有及时关闭Artech的代码看了半天无论是照抄还是改良都是不行,无奈到处看看test最后终于解决了 绑定协议现在只试了http还没有事tcp的 项目结构图如下   目前感觉客户端的调用部分代码很多不 来自博客园地址忘了呵呵     代码如下 using System; using System.
636 0
|
XML 数据格式
跟着Artech学习WCF 省的看书没环境没心情尤其没有看书的环境只有上网的环境
Artech的 我的WCF之旅(1):创建一个简单的WCF程序 http://www.cnblogs.com/artech/archive/2007/02/26/656901.html   以前自己练习WCF是总是通过创建客户端代理类和实现所有东西都是放在创建WCF的项目里面,WCF的地址(A...
877 0