[WCF 学习笔记] 9. 端点绑定

来源:互联网 发布:mac外置触摸板 编辑:程序博客网 时间:2024/05/20 06:41

Endpoints 包含了重要的地址信息,包括服务地址以及通讯协议,客户端只有获知这些信息才能与服务建立通讯。而 Binding用于指定 WCF 两个端点(endpoint)之间的通讯细节,两个端点的 Binding应该是一致的。端点和绑定对象合作,共同完成服务通讯和调用。服务面对的客户端是多样的,不同的客户端可能选择不同的通讯方式,不同的安全方案。WCF允许我们为服务添加多个绑定和端点,这样我们就可以使用同一个服务为不同的客户需求提供解决方案,这是 WebServices 和 Remoting所无法完成的。

Endpoints 格式:scheme://machine:port/path

如:
http://192.168.0.1:8080/IService1
net.tcp://202.100.100.1:123/IService2
net.pipe://localhost/MyPipe
net.msmq://localhost/MyService

Binding 的内容包括:

  • Protocols: 设置安全机制。如消息可靠接收,事务上下文等。
  • Encoding: 设置消息编码方式。如 Text/XML、Binary 或 MTOM。
  • Transport: 设置底层通讯协议。如 Http、TCP 等。

Binding由一系列分工合作的 Element 组成,其中至少包括用于通讯和消息编码的两个 Element。WCF Framework为我们提供了大量常用的 Binding,当然我们也可以自己开发专用的 Binding 类型。使用 Binding很简单,创建系统提供或自己开发的 Binding对象,调整或使用其默认属性,最后用该绑定对象作为参数创建端点即可。我们可以使用编码或者配置文件来调整绑定对象的属性,有关配置文件的信息可以参考MSDN 或者雨痕后面撰写的章节。

WCF Framework 提供的 Binding

  • BasicHttpBinding: 最简单的绑定类型,通常用于 Web Services。使用 HTTP 协议,Text/XML 编码方式。
  • WSHttpBinding: 比 BasicHttpBinding 更加安全,通常用于 non-duplex 服务通讯。
  • WSDualHttpBinding: 和 WSHttpBinding 相比,它支持 duplex 类型的服务。
  • WSFederationHttpBinding: 支持 WS-Federation 安全通讯协议。
  • NetTcpBinding: 效率最高,安全的跨机器通讯方式。
  • NetNamedPipeBinding: 安全、可靠、高效的单机服务通讯方式。
  • NetMsmqBinding: 使用消息队列在不同机器间进行通讯。
  • NetPeerTcpBinding: 使用 P2P 协议在多机器间通讯。
  • MsmqIntegrationBinding: 使用现有的消息队列系统进行跨机器通讯。如 MSMQ。

Binding 基本信息

uploads/200704/11_124806_bindinginfo.gif


粗体表示其基本编码方式。我们注意到 NetTcpBinding、NetPeerTcpBinding、NetNamedPipeBinding、NetMsmqBinding 只能用于 .NET WCF-to-WCF。
(图片选自 《Programming WCF Services》)

Binding 选择策略

uploads/200704/11_121039_choosebinding.gif


(图片选自 《Programming WCF Services》)

有关 Binding 的更详细信息请参考 ms-help://MS.MSSDK.1033/MS.NETFX30SDK.1033/WCF_con/html/2c243746-45ce-4588-995e-c17126a579a6.htm

Example

Server.cs

ServiceHost host = new ServiceHost(typeof(CalculateService));
host.AddServiceEndpoint(typeof(ICalculate), new WSHttpBinding(), "http://localhost:8080/calc");
host.Open();


Client.cs

CalculateClient client = new CalculateClient(new WSHttpBinding(), new EndpointAddress("http://localhost:8080/calc"));
client.Add(1, 2);
原创粉丝点击