WCF 绑定的选择
选自《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 绑定的选择的更多相关文章
- WCF绑定类型选择
WCF绑定类型选择 发布日期:2010年12月10日星期五 作者:EricHu 在开发WCF程序时,如何选择一个适合的绑定对于消息传输的可靠性,传输模式是否跨进程.主机.网络,传输模式的支持. ...
- WCF绑定netTcpBinding寄宿到IIS
继续沿用上一篇随笔中WCF服务类库 Wettery.WcfContract.Services WCF绑定netTcpBinding寄宿到控制台应用程序 服务端 添加WCF服务应用程序 Wettery. ...
- WCF绑定和行为在普通应用和SilverLight应用一些对比
本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 阅读目录 介绍 绑定 普通应用和SilverLight应用区别 本文版权归mephisto和博客园共有, ...
- WCF 绑定(Binding)
绑定包含多个绑定元素 ,它 们描述了所有绑定要求 .可以创建自定义绑定 ,也可以使用下表中的其中一个预定义绑定 : 不同的绑定支持不同的功能.以Ws开头的绑定独立于平台 ,支持 Web服务规范. 以 ...
- WCF - 绑定
从整个基础架构来看 WCF可分为服务模型层和信道层 模型层提供了一个统一的可扩展的编程模型 而信道层提供了对请求信息的接收和处理 而作为WCF通信的三要素之一的绑定 是它实现了组成整个信道层的信道栈 ...
- WCF - 绑定后续之自定义绑定
自定义信道基类 WCF是一个极具扩展性的通信框架 无论在服务模型层还是信道层 都具有很多扩展点 而信道层的扩展点主要体现在实现自定义信道以增强信道栈处理信息的能力 比如我们可以扩展信道层 实现一个自定 ...
- @Html.DropDownListFor 下拉框绑定(选择默认值)
首先先构建绑定下拉框的数据源 private void GetSalesList() { var userList = _rmaExpressAppService.GetUserList(); Tem ...
- WCF绑定netTcpBinding寄宿到控制台应用程序
契约 新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService 代码如下: [ServiceContract] public interface IGa ...
- xml文件绑定chenckbox选择框
//xml文件如下: <?xml version="1.0" encoding="utf-8" ?> <CallReson> <! ...
随机推荐
- python学习day4--python基础--元组,字符串
1.元组 #只读列表,元组,当希望生成后不被修改则用元组 r=(1,2,3,4,5) 元组 2.字符串,python字符串操作非常丰富,编程时可先查询python本身是否已设计了相关函数 #移除空白 ...
- Cocos2d-x中__Dictionary容器以及实例介绍
__Dictionary类在Cocos2d-x 2.x时代它就是CCDictionary类,它是模仿Objective-C中的NSDictionary类而设计的,通过引用计数管理内存.__Dictio ...
- (转)SqlServer2008 数据库同步的两种方式 (发布、订阅)
上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2订阅.首先在数据源数据库服务器上对需要同步的数 ...
- 双网卡route配置
目前仅适用于windows: 192.168.*.*网段适用于上外网的 10网段适用于内网 route add 10.0.0.0 mask 255.0.0.0 10.34.6.1route add 1 ...
- 用sinopia搭建npm私服
需求(这段话是摘抄参考文档的,因为作者也想这么说): 公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件.模块和项目.对于前端,最熟悉的莫过于n ...
- Comparator和Comparable
java.util 接口 Comparator<T> compare int compare(T o1, T o2) 比较用来排序的两个参数.根据第一个参数小于.等于或大于第二个参数分 ...
- nginx上传文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HR不会告诉你的秘密
原文转载自http://blog.csdn.net/happy08god/article/details/5534326 下面,只是摘出来一些基本的观点. 1. 入职时的工资高低不重要,只要你努力工作 ...
- 导出excel表格
一. 1.获取数据源2.DataTable dt = st.Tables[0]; HttpResponse resp; // HTTP响应信息 resp = Page.Response; resp.C ...
- ToolStripStatusLabel设置时间自动更新
在使用委托设置界面上ToolStripStatusLabel类型的控件时间是,发现不能使用自定义的委托方法,在往上查找了一下发现不能使用involve来线程调用.因此只能使用原生委托方法. //代理p ...