• WCF中不同Binding的区别


    Binding是可以自定义实现的,可WCF框架已经为我们实现了足够多的Binding,供我们来选择,如下表所示:

    Binding名称

    Configuration Element

    描述

    BasicHttpBinding

    basicHttpBinding

    一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml

    WSHttpBinding

    wsHttpBinding

    一个安全的通用的binding,但它不能在deplex中使用

    WSDualHttpBinding

    wsDualHttpBinding

    一个安全的通用的binding,但能在deplex中使用

    WSFederationHttpBinding

    wsFederationHttpBinding

    一个安全的通用的支持WSF的binding,能对用户进行验证和授权

    NetTcpBinding

    netTcpBinding

    在wcf应用程序中最适合跨机器进行安全通讯的binding

    NetNamedPipeBinding

    netNamedPipeBinding

    在wcf应用程序中最适合本机进行安全通讯的binding

    NetMsmqBinding

    netMsmqBinding

    在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队

    NetPeerTcpBinding

    netPeerTcpBinding

    一个支持安全的,多机交互的binding

    MsmqIntegrationBinding

    msmqIntegrationBinding

    一个用于wcf与现有msmq程序进行安全通讯的binding

    下面的表格分别删除了上表中的Binding在互操作性(Interoperability), 安全性(Security), 是否支持会话(Session),

    是否支持事务(Transactions)和是否为全双工(Duplex)上不同。

    Bingding

    Interoperability

    Security

    Session

    Transactions

    Duplex

    BasicHttpBinding

    Basic Profile 1.1

    (None), Transport, Message

    None, (None)

    None

    n/a

    WSHttpBinding

    WS

    Transport, (Message), Mixed

    (None), Transport, Reliable Session

    (None), Yes

    n/a

    WSDualHttpBinding

    WS

    (Message)

    (Reliable Session)

    (None), Yes

    Yes

    WSFederationHttpBinding

    WS-Federation

    (Message)

    (None), Reliable Session

    (None), Yes

    No

    NetTcpBinding

    .NET

    (Transport), Message

    Reliable Session, (Transport)

    (None), Yes

    Yes

    NetNamedPipeBinding

    .NET

    (Transport)

    None, (Transport)

    (None), Yes

    Yes

    NetMsmqBinding

    .NET

    Message, (Transport), Both

    (None)

    (None), Yes

    No

    NetPeerTcpBinding

    Peer

    (Transport)

    (None)

    (None)

    Yes

    MsmqIntegrationBinding

    MSMQ

    (Transport)

    (None)

    (None), Yes

    n/a

    例外,《Programming WCF Services》有一幅图也能说明各自的特征:

    下面的图给出了我们选择Binding的方式

    下面的表格表示系统预定义绑定对不同安全模式的支持(WSHttpBinding与WS2007HttpBinding具有相同的安全模式支持策略,这里仅仅列出了WSHttpBinding)。


    BasicHttpBinding WSHttpBinding WSDualHttpBinding NetNamedPipeBinding NetTcpBinding NetMsmqBinding
    None Default Yes Yes Yes Yes Yes
    Transport Yes Yes No Default Default Default
    Message Yes Default Default No Yes Yes
    Mixed Yes Yes Yes No Yes No
    Both No No No No No Yes
    TransportCredentialOnly Yes No No No No No

    针对这个表格,我们可以看出:

    • 所有的绑定都可以不采用任何的安全传输机制,即支持None安全模式;
    • BasicHttpBinding的默认模式为None,WS相关的绑定默认模式为Message,而局域网相关绑定的模式模式为Transport;
    • 除了NetNamedPipeBinding,所有的绑定都支持Message安全模式;
    • 对于所有支持Message模式的绑定,除了NetMsmqBinding都支持Mixed模式;
    • 除了WSDualHttpBinding,所有的绑定都支持Transport模式;
    • 只有BasicHttpBinding支持TransportCredentialOnly模式;
    • 只有NetMsmqBinding支持Both安全模式。

    二、系统预定义绑定对不同Transport客户端凭证的支持

    接下来我们来比较一下对应我们之前介绍的这些常用的系统定义绑定在采用Transport安全模式下,对客户端凭证类型集的支持有何不同。


    BasicHttpBinding WSHttpBinding WSDualHttpBinding NetNamedPipeBinding NetTcpBinding NetMsmqBinding
    None Default Yes - No Yes No
    Basic Yes Yes - No No No
    Digest Yes Yes - No No No
    Windows Yes Default - Default Default Default
    Ntlm Yes Yes - No No No
    Certificate Yes Yes - No Yes No

    从下面的表格反映的数据我们可以看出:

    • 三种基于HTTP的绑定(不包括不支持Transport安全模式的WSDualHttpBinding)支持所有类型的客户端凭证(实际上客户端凭证类型都是通过枚举HttpClientCredentialType表示);
    • 除了BasicHttpBinding在默认的情况下None作为客户端凭证类型(匿名客户端)之外,其它绑定的默认客户端凭证类型都是Windows;
    • NetTcpBinding支持三种客户端凭证类型None、Windows和Certificate;

    • NetNamedPipeBinding和NetMsmqBinding支持唯一的客户端凭证类型Windows。

    三、系统预定义绑定对不同Message客户端凭证的支持

    而不同的绑定针对于Message模式(或者Mixed模式)下的客户端凭证类型的支持就非常清晰了。因为除了BasicHttpBinding采用BasicHttpMessageCredentialType枚举表示其支持的客户端凭证类型之外,其它所有的绑定(不包括不支持Message安全模式的NetNamedPipeBinding)都使用MessageCredentialType表示客户端凭证类型,并且。在Message模式下,不同类型的绑定对不同客户端凭证类型集的支持反映在下面的表格中。


    BasicHttpBinding WSHttpBinding WSDualHttpBinding NetNamedPipeBinding NetTcpBinding NetMsmqBinding
    None No Yes Yes - Yes Yes
    User Name Default Yes Yes - Yes Yes
    Windows No Default Default - Default Default
    Certificate Yes Yes Yes - Yes Yes
    IssuedToken No Yes Yes - Yes Yes

  • 相关阅读:
    nexus 手动更改 私服包
    maven 构建时 错误: 程序包netscape.javascript不存在
    RocketMQ
    NSQ
    beego 实现API自动化文档
    动态追踪技术漫谈
    go vendor管理Golang项目依赖
    consul介绍
    golang rpc介绍
    golang 使用os/exec配合context实现的超时机制
  • 原文地址:https://www.cnblogs.com/shihao/p/2145107.html
Copyright © 2020-2023  润新知