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 |