Welcome

首页 / 软件开发 / WCF / 基础内容-通过发现查找新WCF

基础内容-通过发现查找新WCF2011-04-12 MSDN Juval LowyMicrosoft .NET Framework 3.5 对 Windows Communication Foundation (WCF) 的全部 可能调用均具有两个限制。第一个限制是,分配给服务的端口或管道必须可用。因此,应用 程序开发人员或管理员必须试想或者提供某种方法,以保留这些端口或管道。第二个限制是 ,客户端必须提前知道服务端点地址,包括端口号和服务器或管道名称。

最理想的情况是,服务能够使用任何可用地址。反过来,客户端就需要在运行时发现此地 址。事实上,存在一种基于行业标准的解决方案,用于规定此发现的定位方式。本专栏的主 题就是该解决方案(简称为“发现”)及其支持机制。同时,我还会介绍几个有用的工具和 帮助程序类。这些内容的源代码,可在 code.msdn 中找到。

地址发现

发现依赖于用户数据报协议 (UDP)。与传输控制协议 (TCP) 不同,UDP 是无连接协议, 在数据包发送者和接收者之间不需要建立直接连接。客户端使用 UDP 传播对任何支持指定约 定类型的端点的发现请求。服务所支持的专门发现端点将接收这些请求。发现端点的实现将 响应客户端,以提供支持指定约定的服务端点的地址。客户端发现服务后将对其进行调用, 与常规 WCF 调用相同。有关该过程,在图 1 中进行了演示。

图 1 通过 UDP 的发现地址

与元数据交换 (MEX) 端点非常类似,WCF 提供了类型为 UdpDiscoveryEndpoint 的标准 发现端点:

public class DiscoveryEndpoint : ServiceEndpoint

{...}

public class UdpDiscoveryEndpoint : DiscoveryEndpoint

{...}

通过在服务支持的行为集合中添加 ServiceDiscoveryBehavior,可以使主机实现该端点 。可以通过以下编程方式实现此目的:

ServiceHost host = new ServiceHost(...);
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
ServiceDiscoveryBehavior discovery = new ServiceDiscoveryBehavior();
host.Description.Behaviors.Add(discovery);
host.Open();

图 2 显示如何使用服务配置文件添加发现端点和发现行为。

图 2 在配置文件中添加发现端点

<services>
<service name = "MyService">
<endpoint
kind = "udpDiscoveryEndpoint"
/>
...
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDiscovery/>
</behavior>
</serviceBehaviors>
</behaviors>