WCF 4.0中的WS-Discovery

简介:

在WS-*标准和规范中,WS-Discovery是在2008年才加入了OASIS标准。WS-Discovery在标准被定义为Web Service Dynamic Discovery,其目的是为定位服务定义Discovery协议,主要应用在为客户端动态搜索一个或多个目标服务。OASIS为WS-Discovery提供了两种操作模式:ad hoc和managed模式。

ad hoc模式根据类型在托管目标服务的范围内查找目标服务。客户端会以多播的形式发送一个Probe(探测)消息,如果服务匹配该信息,则以单播方式直接将响应发送到客户端。为了能够根据名称定位目标服务,客户端会以相同的多播组发送一个Resolve(解析)消息,同样的,匹配该消息的服务会直接以单播方式响应客户端。消息交换的流程如下图所示:

如果Endpoint的数量扩大了,且超出了ad hoc网络的范围之外,而且在网络中可以使用Discovery Proxy(发现代理),则应该采用Managed操作模式,以禁止多播的行为。在Managed模式下,目标服务只需要以单播的形式发布一个announcement(通告)消息到Discovery Proxy,同时,客户端也会以单播形式发送Probe和Resolve消息到Discovery Proxy。这种模式并非直接采用单播方式,而是会实时对Discovery Proxy进行监听,然后根据情况切换操作模式,从而降低多播给网络传输带来的影响。当Discovery Proxy检测到在ad hoc网络中有多播方式发送的Probe和Resolve消息时,它就会发布announcement通知自身。客户端一旦监听到Discovery Proxy上的announcement消息,就切换为Managed模式,直接以单播方式将probe和resolve消息发送给Discovery Proxy。如果Discovery Proxy没有响应,客户端又会切换为ad hoc操作模式。Managed模式的消息交换流程如下所示:

 

 WCF 4.0实现了OASIS的WS-Discovery标准,相关的类定义在System.ServiceModel.Discovery命名空间中。这是一个单独的程序集,所以需要添加对它的引用。如下图所示:

 

WCF Discoverty支持ad hoc和Managed模式,其中实现Managed模式需要实现Discovery Proxy。相关内容我会在另外一篇文章中讲解。

在WCF 4.0中,新增了ServiceDiscoveryBehavior行为类,可以控制服务终结点的可发现能力。它能够让服务的所有终结点都能被发现,相反,如果使用EndpointDiscoveryBehavior则只能使特定的终结点能够被发现。除了需要添加发现行为,我们还需要添加发现终结点,用来指定监听以及发送discovery消息。WCF中标准的发现终结点类是UdpDiscoveryEndpoint,它基于UDP的多播绑定,是WCF预先配置好的发现终结点。该终结点继承自DiscoveryEndpoint类。在托管服务的时候,我们可以向ServiceHost中添加ServiceDiscoveryBehavior和EndpointDiscoveryBehavior,如下所示:

 class CalculatorServiceHost {

   public static void Main() {

       Uri baseAddress = new Uri("http://localhost:8000/" + Guid.NewGuid().ToString());                       

 

       using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress)) {

           serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new WSHttpBinding(), String.Empty);

 

           // Make the service discoverable over UDP multicast           

           serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());               

           serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

 

           serviceHost.Open();

 

           Console.WriteLine("Calculator Service started at {0}", baseAddress);

           Console.WriteLine();

           Console.WriteLine("Press <ENTER> to terminate the service.");

           Console.WriteLine();

           Console.ReadLine();

       }

   }

}

在对服务宿主进行如下设置之后,客户端就可以通过发送Probe和Resolve消息来发现服务。WCF将这些逻辑封装在了DiscoveryClient类中。它接受一个发现终结点对象,然后通过调用它的Find()方法(该方法接受一个FindCriteria实例,用来指定搜索标准,在下面的代码片断中指定搜索标准为按照目标服务的类型),返回FindResponse对象。该对象会包含一个Collection<EndpointDiscoveryMetadata>类型的属性Endpoints:

// Create DiscoveryClient

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

 

Console.WriteLine("Finding ICalculatorService endpoints...");

Console.WriteLine();

 

// Find ICalculatorService endpoints           

FindResponse findResponse = discoveryClient.Find(new FindCriteria(typeof(ICalculatorService)));

 

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count);

Console.WriteLine();

 

if (findResponse.Endpoints.Count > 0)  {

    return findResponse.Endpoints[0].Address;

}  else  {

    return null;

}

通过WS-Discovery,我们不需要知道WCF服务的终结点,只要存在目标服务,我们就能够动态查找到该服务。即使服务的Url发生改变,我们也不需要修改任何代码和配置文件,客户端仍然能够正常发现目标服务。






本文转自wayfarer51CTO博客,原文链接:http://blog.51cto.com/wayfarer/279919,如需转载请自行联系原作者

相关文章
|
网络性能优化 网络虚拟化 网络架构
配置基于VLAN限速示例
除了ACL之外,MQC配置中的流分类定义了大量的二三层匹配规则,如VLAN ID、802.1p优先级、DSCP优先级、源MAC、目的MAC等,设备可以通过配置不同的流分类规则将报文进行分类,并配置限速、统计或者镜像等流行为,以实现不同的策略。 本例就是在流分类中匹配不同的VLAN ID,并对符合规则的报文分别配置不同的限速带宽,以达到对不同的业务流量分配不同带宽的目的。
335 2
|
存储 数据安全/隐私保护 Ubuntu
安装Coturn(TURN / STUN服务器)
安装Coturn(TURN / STUN服务器) 在云上使用TURN / STUN服务器,需要打开安全组中的所有UDP端口,因为STUN / TURN将使用整个0-65535范围内的任何可用端口。 在Ubuntu 16.
14508 0
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
自然语言处理
IEC 61131-3标准编程入门
IEC 61131-3标准编程入门
|
机器学习/深度学习 PHP 开发者
深入探讨PHP中的闭包与匿名函数
在现代PHP开发中,闭包与匿名函数已经成为日常编程的利器。本文将通过详细解说和实例演示,帮助开发者深入理解并有效应用这些功能,从而提升代码的灵活性和可维护性。
205 27
|
弹性计算 缓存 数据库
阿里云服务器2核4G配置租用价格表_2核4G性能参数说明
阿里云服务器2核4G配置租用价格表_2核4G性能参数说明,2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年
|
人工智能 达摩院 计算机视觉
《阿里云AI产品必知必会系列电子书》——阿里云视觉智能开放平台——人脸识别QuickStart使用教程(上)
《阿里云AI产品必知必会系列电子书》——阿里云视觉智能开放平台——人脸识别QuickStart使用教程(上)
1200 0
【分享】宜搭自定义表格如何实现合并相同单元格
宜搭自定义表格合并单元格 by 页一 转载请注明出处
1416 2
【分享】宜搭自定义表格如何实现合并相同单元格
|
安全 测试技术 网络安全
【网络安全】渗透测试工具——Burp Suite(上)
【网络安全】渗透测试工具——Burp Suite(上)
995 0
【网络安全】渗透测试工具——Burp Suite(上)

热门文章

最新文章