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

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);

posted on 2008-11-06 13:20  topzengyi  阅读(173)  评论(0)    收藏  举报

导航