声明:本文章转自http://www.cnblogs.com/artech/archive/2011/10/07/WS-Discovery.html,非原创

我们传统的服务调用的模式都是这样的:客户端在设计的时候预先知道目标服务的地址,并基于这个地址创建终结点对服务进行调用。而我们即将介绍的新特性是你在预先不知道目标服务的情况下,可以动态的探测可用的服务并调用之。就像我们的无线网卡可以动态的获取周围可用的Wifi网络一样。

服务发现接触了客户端和服务端之间的依赖。允许服务的提供者可用动态的改变它的地址,也是新德服务可以很容易的被注册并为人所用。关键一点的事,服务发现并不是微软在.NET平台下的闭门造车,而是基于一个开发的标准,即我们接下来着重介绍的WS-Discovery.也就是说,如果Java平台的Web服务也是基于相同的WS-Discovery标准,那么他们也可以被wcf客户端“发现”。

一、WS-Discovery

WS-Discovery(全程为Web Services Dynamic Discovery),是由结构化信息标准组织制定。WS-Discovery1.0第一个正式版本发布于2005年,2009年OASIS发布了WS-Discovery1.1,到目前来看这是最新的版本。

WS-Discovery定义了两种基本的实现服务发现机制操作模式,即Ad-Hoc和Managed。在Ad-Hoc模式下,客户端在一定的网络范围内以广播的形式发送探测(probe)消息以搜寻目标服务。在该探测消息中,包含相应的搜寻条件。服务该条件的目标服务在接受探测消息之后将自身的相关的信息(包括地址)回复给作为广播消息发送源的客户端。客户端获取得到服务信息,选择合适的服务进行调用。

对于采用广播形式的ad-Hoc服务发现模式,可用的目标服务的范围往往只局限于一个较小的网络。比如对于基于UDP的广播的服务探测,能够被探测只能维护本地子网中。为了解决这个问题,我们可以采用Managed模式。在Manged模式下,一个维护所有可用的目标服务的中心发现代理(Discover Rroxy)被建立起来,客户端只需要将被探测信息发送代理就可以得到相应的目标服务信息。由于在Ad-Hoc模式下的广播探测机制在Managed模式下被转变成单播模式,带来的好处就是极大的减轻了网络的负载(Net work Traffic).

实际上发现代理不仅仅使用在Managed模式下,在Ad-Hoc模式下也可以使用到它,除了上述的这种客户端驱动(客户端主动探测可用的目标服务)模式之外,还可以采用目标服务驱动的模式。在该模式下,客户端开启一个监听程序用于监听上线和离线的服务,而且目标服务在上线和离线的时候向监听者发送相应的通知。

要了解Ad-Hoc和Mangaged模式下的服务发现机制时如何实现的,就需要了解在整个服务模型中各个角色(客户端、目标服务和发现代理)之间是如何协作的。接下来,我们就从信息交互的角度谈谈服务发现模型中各个角色的交互协作问题。

二、Ad-Hoc模式

下面所示的序列图揭示了在Ad-Hoc模式下,客户端和目标服务之间的信息交换。目标服务在上线和离线的时候以广播的形式分别发送一个Hello和Bye消息,而客户端自然是该消息的其中一个接受者。

如果客户端需要通过获取当前可用的目标服务,需要以广播的形式发送一个Probe消息,该消息包含用以探测的目标服务所满足的条件。对于接受该广播的目标服务,如果自身满足包含Probe消息中的条件,则可以单播的形式回复给客户端一个Probe Mtach(简称PM)消息。

如果客户端从PM消息中获取的关于目标服务的相关的信息足以对其进行调用,则不需要进行后续的信息交换。否则(比如获取的PM消息中没有包含目标服务的地址)还需要进行一次旨在实现最终服务调用的服务解析(Resolution)的信息交换。具体来说,客户端以广播的形式发送Resolve请求(4),该请求中包含某个目标服务相关的信息,Resolve和Probe广播具有相同的范围。真正的目标服务(包含在Resolve消息中用以解析的服务)将包含自身地址在内的信息以Resolve Match(简称PM)消息的形式回复给客户端(5)。

在上面我们说过,Managed模式需要一个发现代理对目标进行统一的管理,但是发现代理本身就可以用在Managed模式,可以用Ad-Hoc模式。在Ad-Hoc模式下,发现代理对于客户端来说扮演者目标服务的角色,而对真正的目标服务来说,则扮演者客户端的角色。相当于一个信息的中介者,下图揭示了在发现代理存在的Ad-Hoc模式下,客户端,目标服务器和发现代理之间进行的信息交互。

在发现代理存在的情况下,客户端和目标服务之间还是按照上面介绍的方式进行消息交换。比如Hello/Bye(4)、Probe/PM和Resolve/RM(5和7)。而发现代理上线和下线的时候,会像真正的目标服务一样发出Hello/Bye(1)广播。当接收到客户端发出的Probe/Resolve广播的时候(2),它会像真正的目标服务一样回复以PM/RM消息(3),该回复消息中包含它自身维护的与Probe/Resolve请求匹配的目标服务。发现代理同样会接收到真正的目标上下线发出的Hello/Bye广播(4),它可以借此来更新维护的可用目标服务列表。

对于发现代理参与下的Ad-Hoc模式,发现代理还提供了一种转换成Managed模式的机制。具体的实现是这样的:当发现代理接收到客户端发出的Probe/Resolve广播后(5),会回复给客户端一个Hello消息,表明发现代理的存在并可以从Ad-Hoc模式转换到Managed模式。客户端在接收到该Hello消息后(6),就会将原来以广播的形式发送的Probe/Resolve请求转换成指向发现代理的单播形式发送。

三、Managed模式

在Managed模式下,由于可用的服务都注册到发现代理中,客户端只需要和发现代理交互就可以进行可用服务的探测和解析,而目标服务只需要和直接和发现代理交换就能实现自身的注册。在Managed模式下,发现代理真正的核心。而且所有的消息交互的方式都是以单播的方式进行的。这样的好处是:1、可以解除广播对网络的限制,扩大可用服务的范围,而来可以避免广播引起的网络的拥堵。

在Managed模式下,客户端、发现代理和目标服务之间进行的消息交互,目标服务上/下线的时候只需要向代理服务发送Hello/bye通知。而客户端可以进行的服务探测和服务解析发送的probe、Resolve也只需要单独发送给发现代理。作为回复,发现代理将PM返回给客户端。

转载于:https://www.cnblogs.com/zhijianliutang/archive/2011/12/22/2297537.html

WCF-Discovery的协议基础:WS-Disvovery(客户端驱动探测服务)相关推荐

  1. wcf高并发 mysql_WCF 高并发时客户端发送和服务端接收存在等待或延迟

    前提: .net版本: .net framework 4.5.2(服务端),.net framework 3.5(客户端) 服务器:8核E5420 2.5GHZ,16G内存,1万转HDD磁盘 wind ...

  2. wss 协议php,作为ws/wss客户端

    # 作为ws/wss客户端 有时候需要让workerman作为客户端以ws/wss协议去连接某个服务端,并与之交互. 以下是示例. 1.workerman作为ws客户端 ```php use Work ...

  3. wcf客户端动态嗅探服务实例

    参照博客园蒋金楠老师的博客和MSDN的一片文章,现在把wcf客户端动态嗅探wcf服务用一个实例来做出总结. 在以往的wcf客户端应用的时候,我们需要提供客户服务地址和端口或者管道,当然有时候需要我们服 ...

  4. 浏览器原理及HTTP网络协议基础简答题

    ## 浏览器原理 **有兴趣读一下** 常⻅的浏览器内核有哪些? Trident (IE内核) Gecko(firefox) webkit(Safari) Chromium/Bink(chrome) ...

  5. HTTP协议与WS协议小结

    前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容, ...

  6. TCP协议的服务器与客户端的程序设计(代码注释超详细)

    在上篇博客中讲到了三次握手和四次挥手: Linux网络编程--TCP中的三次握手和四次挥手_神厨小福贵!的博客-CSDN博客服务器编程和客户端编程的大致流程如下:三次握手是在客户端中的connect中 ...

  7. TCP/IP协议基础

    1.TCP/IP协议栈 四层模型  TCP/IP这个协议遵守一个四层的模型概念:应用层.传输层.互联层和网络接口层. 网络接口层  模型的基层是网络接口层.负责数据帧的发送和接收,帧是独立的网络信息传 ...

  8. 网工协议基础(4)TCP/UDP协议

    往期回顾 网工协议基础(1) OSI七层模型 网工协议基础(2) TCP/IP四层模型 网工协议基础(3) IP地址 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 ...

  9. web安全学习—Http协议基础

    今天在安全龙网站上听老师讲了Http协议基础,有的东西不是一遍就可以记住的,就先记录一下,方便以后自己看(截图都是转载于安全龙网站). 1.超文本 包含有超链接(link)和各种多媒体元素标记(Mar ...

最新文章

  1. FPGA设计中MEMORY型数据怎么综合到blockRAM里面(二)
  2. 使用Exiv2读取图像属性的详细信息
  3. 太赞了!华为《Linux中文手册》火了,完整版 PDF 开放下载!
  4. TVS二极管挑选法宝,聪明的你看看也知道
  5. android 开发时遇到的环境问题3--eclipse整个项目工程报错
  6. 天池 在线编程 LR String
  7. ElasticSearch简单搭建
  8. 【Docker系列教程之三】Docker容器是如何工作的
  9. 取消xp开机默认登陆账户
  10. binary-tree-maximum-path-sum——二叉树任意一条路径上的最大值
  11. Flutter学习 — 实现滑动关闭、删除item
  12. C语言:数组排序(选择法排序)
  13. 基于jsp+mysql+Spring+mybatis的SSM健身房管理系统
  14. c语言中使用的字符常量其起止标记符是,2021国家开放大学电大本科《C语言程序设计》期末试题及答案(试卷号:1253)...
  15. 卫星ku波段为何优先使用垂直极化波
  16. 【渝粤题库】国家开放大学2021春2026国际金融题目
  17. QQ传输文件原理参考(来自互联网)
  18. python简单笔试题_python编程简单笔试题
  19. c 程序设计语言标准库,C++程序设计语言(第4部分:标准库)(原书第4版) 中文pdf扫描版[86MB]...
  20. 清朝官场三百年之抢班夺权

热门文章

  1. 又一轮电邮中间人攻击来袭 企业如何自保?
  2. [HTML/CSS]margin属性用法
  3. POJ 3264: Balanced Lineup
  4. Java程序结合Aapche Ant进行远程服务器文件备份
  5. cakephp对数据库的增删改查
  6. Elasticsearch 及 Kibana 安装篇
  7. 实验8-SPSS交叉表分析
  8. 看看HashSet源码
  9. 相关Linux命令的学习
  10. python模拟ATM + 购物商城