• 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 选择绑定。
    使用绑定

  • 相关阅读:
    EXT今日笔记自定义vtype
    游标的原理
    调用Excle组件导出,解决权限问题
    解决EntityFramework数据库无法自动迁移解决方法
    初涉AJAX
    20151015_系统分析阶段分析类的三种类型
    20151007_手动刷新Android系统SD卡
    20151014_基于距离的分类算法之KNN
    20151008_Android Application类
    20150919_获取Android唯一标识码
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3342084.html
Copyright © 2020-2023  润新知