zoukankan      html  css  js  c++  java
  • 学习 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对我的指导和帮助。有什么不正确的地方还希望大家指正。



        文章作者:高维鹏(Brian)
        文章出处:http://www.cnblogs.com/gaoweipeng
        欢迎转载,转载时请注明出处。谢谢合作。

  • 相关阅读:
    Flutter 容器(4)
    Linux 安装maven环境
    ajaxStart、ajaxStop使用注意事项
    jquery里用正则来验证密码,必须包含大小写字母,数字及特殊符号,或最少包含两种
    Nginx 相关介绍(Nginx是什么?能干嘛?配有图片示例)
    常见web攻击总结
    用php的chr和ord函数实现字符串和ASCII码互转
    消息队列设计精要
    mysql索引总结----mysql 索引类型以及创建
    MySQL事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/soundcode/p/2131071.html
Copyright © 2011-2022 走看看