选自《WCF服务编程中文版》 第一章 WCF基础

绑定
服务之间的通信方式是多种多样的,有多种可能的通信模式。包括:同步的请求/ 应答
(Request/Reply)消息,或者异步的“即发即弃(Fire-and-Forget)”消息;双向
(Bidirectional)消息;即时消息或队列消息;以及持久(Durable)队列或者可变
(Volatile)队列。传递消息的传输协议包括:HTTP(或HTTPS)、TCP、P2P(对等网)、
IPC(命名管道)以及MSMQ。消息编码格式包括:保证互操作性的纯文本编码格式;
优化性能的二进制编码格式;提供有效负载的MTOM(消息传输优化机制,Message
Transport Optimization Mechanism)编码格式。消息的安全保障也有多种策略,包括:
不实施任何安全策略;只提供传输层的安全策略;消息层的隐私保护与安全策略。当然,
WCF 还包括多种对客户端认证与授权的安全策略。消息传递(Message Delivery)可能
是不可靠的,也可能是可靠的端对端跨越中间方,然后断开连接的方式。消息传递可能
按照发送消息的顺序处理,也可能按照接收消息的顺序处理。服务可能需要与其他服务
或客户端交互,这些服务或客户端或者只支持基本的Web服务协议,或者使用了流行的
WS-* 协议,例如WS-Security 或者WS-Atomic Transaction。服务可能会基于原来的
MSMQ 消息与旧的客户端(Legacy Client)交互,或者限制服务只能与其他的WCF 服
务或客户端交互。
若要计算所有可能的通信模式与交互方式之间的组合,数量可能达到上千万。在这些组
合选项中,有的可能是互斥的,有的则彼此约束。显然,客户端与服务必须合理地组合
这些选项,才能保证通信的顺畅。对于大多数应用程序而言,管理如此程度的复杂度并
无业务价值。然而,一旦因此作出错误决定,就会影响系统的效率与质量,造成严重的
后果。
为了简化这些选项,使它们易于管理,WCF 引入了绑定(Binding)技术将这些通信特
征组合在一起。一个绑定封装了诸如传输协议、消息编码、通信模式、可靠性、安全性、
事务传播以及互操作性等相关选项的集合,使得它们保持一致。理想状态下,我们希望
将所有繁杂的基础功能模块从服务代码中解放出来,允许服务只需要关注业务逻辑的实
现。绑定使得开发者能够基于不同的基础功能模块使用相同的服务逻辑。
在使用WCF提供的绑定时,可以调整绑定的属性,也可以从零开始定制自己的绑定。服
务在元数据中发布绑定的选项,由于客户端使用的绑定必须与服务的绑定完全相同,因
此客户端能够查询绑定的类型与特定属性。单个服务能够支持各个地址上的多个绑定。

标准绑定
WCF 定义了9 种标准绑定:
基本绑定(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 联邦绑定(译注6)(Federated WS Binding)
由WSFederationHttpBinding类提供。WS联邦绑定是一种特殊的WS绑定,提
供对联邦安全(Federated Security)的支持。联邦安全不在本书讨论范围之内。
WS 双向绑定(Duplex WS Binding)
由WSDualHttpBinding 类提供。WS 双向绑定与WS 绑定相似,但它还支持从服
务到客户端的双向通信,相关内容在第5 章介绍。
译注6: WSFederationHttpBinding 支持WS-Federation 安全通信协议。WS-Federation 是WS 联
盟协议的一部分,定义了如何创建跨越多个安全区域的联邦会话,以便在经过单次身份
认证后即可使用部署在多个安全区域内的Web服务。它是一个联邦中多个实体相互信任
的安全机制。对于该安全机制,我们可以想象一下联邦国家中各个成员体之间的安全关
系。追本溯源,这也正是它命名为WS-Federation 的主要原因。

MSMQ绑定
由NetMsmqBinding 类提供。它使用MSMQ 进行传输,用以提供对断开的队列调
用的支持。相关内容在第9 章介绍。

MSMQ 集成绑定(MSMQ Integration Binding)
由MsmqIntegrationBinding 类提供。它实现了WCF 消息与MSMQ消息之间的
转换,用以支持与旧的MSMQ 客户端之间的互操作。MSMQ集成绑定不在本书讨
论范围之内。

格式与编码
每种标准绑定使用的传输协议与编码格式都不相同,如表1-1 所示。
表1-1:标准绑定的传输协议与编码格式(默认的编码格式为黑体)
名字传输协议编码格式互操作性
BasicHttpBinding HTTP/HTTPS Text, MTOM Yes
NetTcpBinding TCP Binary No
NetPeerTcpBinding P2P Binary No
NetNamedPipeBinding IPC Binary No
WSHttpBinding HTTP/HTTPS Text, MTOM Yes
WSFederationHttpBinding HTTP/HTTPS Text, MTOM Yes
WSDualHttpBinding HTTP Text, MTOM Yes
NetMsmqBinding MSMQ Binary No
MsmqIntegrationBinding MSMQ Binary Yes
文本编码格式允许WCF服务(或客户端)能够通过HTTP 协议与其他服务(或客户端)
通信,而不用考虑它使用的技术。二进制编码格式通过TCP 或IPC 协议通信,它所获得
的最佳性能是以牺牲互操作性为代价的,它只支持WCF 到WCF 的通信。

选择绑定
为服务选择绑定应该遵循图1-4 所示的决策活动图表。
首先需要确认服务是否需要与非WCF 的客户端交互。如果是,同时客户端又是旧的
MSMQ客户端,选择MsmqIntegrationBinding绑定就能够使得服务通过MSMQ与该
客户端实现互操作。如果服务需要与非WCF 客户端交互,并且该客户端期望调用基本
的Web 服务协议(ASMX Web 服务),那么选择BasicHttpBinding 绑定就能够模拟


图1-4:选择绑定
ASMX Web 服务(即WSI-Basic Profile)公开WCF 服务。缺点是我们无法使用大多数
最新的WS-*协议的优势。但是,如果非WCF客户端能够识别这些标准,就应该选择其
中一种WS 绑定,例如WSHttpBinding、WSFederationBinding 或者
WSDualHttpBinding。如果假定客户端为WCF客户端,同时需要支持脱机或断开状态
下的交互,则可以选择NetMsmqBinding 使用MSMQ 传输消息。如果客户端需要联机
通信,但是需要跨机器边界调用,则应该选择NetTcpBinding通过TCP 协议进行通信。
如果相同机器上的客户端同时又是服务,选择NetNamePipeBinding使用命名管道可以
使性能达到最优化。如果基于额外的标准,例如回调(选择WSDualHttpBinding)或
者联邦安全(选择WSFederationBinding),则应对选择的绑定进行微调。
注意: 即使超出了使用的目标场景,大多数绑定工作仍然良好。例如,我们可以使用TCP 绑定实
现相同机器甚至进程内的通信;我们也可以使用基本绑定实现Intranet 中WCF 对WCF 的
通信。然而,我们还是应尽量按照图1-4 选择绑定。
使用绑定

WCF 绑定的选择的更多相关文章

  1. WCF绑定类型选择

    WCF绑定类型选择   发布日期:2010年12月10日星期五 作者:EricHu   在开发WCF程序时,如何选择一个适合的绑定对于消息传输的可靠性,传输模式是否跨进程.主机.网络,传输模式的支持. ...

  2. WCF绑定netTcpBinding寄宿到IIS

    继续沿用上一篇随笔中WCF服务类库 Wettery.WcfContract.Services WCF绑定netTcpBinding寄宿到控制台应用程序 服务端 添加WCF服务应用程序 Wettery. ...

  3. WCF绑定和行为在普通应用和SilverLight应用一些对比

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 阅读目录 介绍 绑定 普通应用和SilverLight应用区别 本文版权归mephisto和博客园共有, ...

  4. WCF 绑定(Binding)

    绑定包含多个绑定元素 ,它 们描述了所有绑定要求 .可以创建自定义绑定 ,也可以使用下表中的其中一个预定义绑定 : 不同的绑定支持不同的功能.以Ws开头的绑定独立于平台 ,支持 Web服务规范. 以 ...

  5. WCF - 绑定

    从整个基础架构来看 WCF可分为服务模型层和信道层 模型层提供了一个统一的可扩展的编程模型 而信道层提供了对请求信息的接收和处理 而作为WCF通信的三要素之一的绑定 是它实现了组成整个信道层的信道栈 ...

  6. WCF - 绑定后续之自定义绑定

    自定义信道基类 WCF是一个极具扩展性的通信框架 无论在服务模型层还是信道层 都具有很多扩展点 而信道层的扩展点主要体现在实现自定义信道以增强信道栈处理信息的能力 比如我们可以扩展信道层 实现一个自定 ...

  7. @Html.DropDownListFor 下拉框绑定(选择默认值)

    首先先构建绑定下拉框的数据源 private void GetSalesList() { var userList = _rmaExpressAppService.GetUserList(); Tem ...

  8. WCF绑定netTcpBinding寄宿到控制台应用程序

    契约 新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService 代码如下: [ServiceContract] public interface IGa ...

  9. xml文件绑定chenckbox选择框

    //xml文件如下: <?xml version="1.0" encoding="utf-8" ?> <CallReson> <! ...

随机推荐

  1. sql2005导出数据字典

    右击要导出的数据库,点击 新建视图 粘贴下面代码 SELECT 表名= then d.name else '' end, 表说明= then isnull(f.value,'') else '' en ...

  2. PC电脑运行Android模拟器总是弹出“视频源”窗体的原因和解决方案

    原因: PC电脑运行Android模拟器时弹出“视频源”窗体,会让你"选择视频设备",如:HP TruevIsion HD,而这个视频设备就是你电脑中的内置摄像头,这个内置摄像头在 ...

  3. Ant 命令总结

    1 Ant是什么? Apache Ant 是一个基于 Java的生成工具.生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式).随着应用程序的生成 ...

  4. Unite Beijing 2015大型活动

    摘要:2015年,我做的最疯狂的事情:网友见面会—去北京参加Unite Beijing 2015大会. 正文:记得,上次在北京参加大型活动还是2008年前–传统电信行业的巅峰时期:那时移动互联网.An ...

  5. makefile --文件文档经链接使用

    生成.a 文件是什么? 在makefile的设置使得文件文档可以方便的使用,不用特意的加某些头文件 加入某些产生的链接包

  6. ThinkPHP3.2 加载过程(二)

    回顾: 上次介绍了 ThinkPHP 的 Index.PHP入口文件.但只是TP的入口前面的入口(刷boss总是要过好几关才能让你看到 ,不然boss都没面子啊),从Index.PHP最后一行把我们引 ...

  7. Android Animation ---TranslateAnimation

    if(stopBtn.getVisibility()==View.VISIBLE){ Animation animation_stop = new TranslateAnimation( Animat ...

  8. Geographic Coordinate Systems

    Coordinate Systems Geographic Coordinate Systems This is an archive of a previous version of the Arc ...

  9. pdf转chm的实现方法

    相比pdf, CHM电子书在Windows系统下不需要安装额外的浏览器即可进行阅读,其内容是基于浏览器的风格,更容易被用户所接受.而且, 具有更强大的功能配置,比如可提供强大的全文搜索.索引.书签等的 ...

  10. 写文件前, 检查目录写权限(PHP)

    写文件前, 检查目录写权限 写或保存文件前, 确保目录是可写的, 假如不可写, 输出错误信息. 这会节约你很多调试时间. linux系统中, 需要处理权限, 目录权限不当会导致很多很多的问题, 文件也 ...