BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务。用于兼容旧的Web ASMX 服务(Web Service)。WSHttpBinding: 比 BasicHttpBinding 更加安全,通常用于 non-duplex 服务通讯。(WS:Windows Security)WSDualHttpBinding: 和 WSHttpBinding 相比,它支持 duplex 类型的服务。WSFederationHttpBinding: WS-Federation 安全通讯协议。NetTcpBinding: 使用 TCP 协议,用于在局域网(Intranet)内跨机器通信。有几个特点:可靠性、事务支持和安全,优化了 WCF 到 WCF 的通信。限制是服务端和客户端都必须使用 WCF 来实现。NetNamedPipeBinding: 使用命名管道进行安全、可靠、高效的单机服务通讯方式。NetMsmqBinding: 使用消息队列在不同机器间进行非连接通讯。NetPeerTcpBinding: 使用 P2P 协议在多机器间通讯。MsmqIntegrationBinding: 将 WCF 消息转化为 MSMQ 消息,使用现有的消息队列系统进行跨机器通讯。如 MSMQ。
名称
传输
编码
共同操作
BasicHttpBinding
HTTP/HTTPS
Text
Yes
NetTcpBinding
TCP
Binary
No
NetPeerTcpBinding
P2P
Binary
No
NetNamedPipeBinding
IPC
Binary
No
WSHttpBinding
HTTP/HTTPS
Text,MTOM
Yes
WSFederationBinding
HTTP/HTTPS
Text,MTOM
Yes
WSDualHttpBinding
HTTP
Text,MTOM
Yes
NetMsmqBinding
MSMQ
Binary
No
MsmqIntegrationBinding
MSMQ
Binary
Yes
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
绑定类名称
传输
消息编码
消息版本
安全模式
可靠消息传送
事务流(默认情况下禁用)
BasicHttpBinding
HTTP
文本
SOAP 1.1
无
不支持
不支持
WSHttpBinding
HTTP
文本
SOAP 1.2 WS-Addressing 1.0
消息
禁用
WS-AtomicTransactions
WSDualHttpBinding
HTTP
文本
SOAP 1.2 WS-Addressing 1.0
消息
启用
WS-AtomicTransactions
WSFederationHttpBinding
HTTP
文本
SOAP 1.2 WS-Addressing 1.0
消息
禁用
WS-AtomicTransactions
NetTcpBinding
TCP
二进制
SOAP 1.2
传输
禁用
OleTransactions
NetPeerTcpBinding
P2P
二进制
SOAP 1.2
传输
不支持
不支持
NetNamedPipesBinding
命名管道
二进制
SOAP 1.2
传输
不支持
OleTransactions
NetMsmqBinding
MSMQ
二进制
SOAP 1.2
消息
不支持
不支持
MsmqIntegrationBinding
MSMQ
不支持(使用 WCF 之前的序列化格式)
不支持
传输
不支持
不支持
CustomBinding
您决定
您决定
您决定
您决定
您决定
您决定
可以通过修改WCF配置文件来修改binding的方式,修改WCF配置文件可以使用VS自带的WCF配置修改工具(WCF Service Configuration Editor)
这里写一个配置文件的注释,这份是一个Service端的配置文件(不是Host,所以能公开元数据)。
WCF 配置开始
一个服务器行为的配置开始
配置一个行为 name:行为的名称
表示此service可以调试
元数据的配置, httpGetEnabled:是否可以使用Http来获取元数据,
httpsGetEnabled:是否可以使用Https来获取元数据
当设置为可以获取元数据, 就必须配置http或https的路径
服务器行为配置结束
服务器配置开始
name:服务类的位置
contract:公共接口的位置
contract:公共接口的位置
IMetadataExchange: 公开用于返回有关服务的元数据的方法。
主机配置
配置一个服务器的监听路径
代理类生成:不单是WCF服务文件(.svn)能用工具(svcutil.exe)来生成客户端代理,即使使用WCF服务库也可以通过WCF服务主机的元数据地址来使用svcutil.exe生成代理。
- 一个双绑定,带配置文件的Host的Demo:
端口配置
端口配置
Uri tcpAddress = new Uri("net.tcp://localhost:9000/Service");
Uri httpAddress = new Uri("http://localhost:9001/Service");
ServiceHost Host = new ServiceHost(typeof(WCFCompnent.Service), tcpAddress, httpAddress);
Host.Open();
Console.WriteLine("服务已经启动!");
Console.Read();
Host.Close();
- 不带配置文件的Host:
Uri baseAddress = new Uri("net.tcp://localhost:9000/ServoceHost");
Uri mexAddress = new Uri("mex", UriKind.Relative);
using (ServiceHost serviceHost = new ServiceHost(typeof(Service), baseAddress))
{
NetTcpBinding binding = new NetTcpBinding();
serviceHost.AddServiceEndpoint(typeof(PublicElements.publicInterface.IService), binding, baseAddress);
serviceHost.Open();
Console.WriteLine("服务器已经打开");
Console.WriteLine("按任意键关闭");
Console.Read();
serviceHost.Close();
}