MS.Tech - IT人

.NET & 微软企业服务器 & 前沿技术和产品
随笔 - 107, 评论 - 1269, 引用 - 87

导航

关于

所有内容和观点仅代表个人观点,如有问题和建议请发Email给我。

标签

每月存档

最新留言

广告

 

先讲一个寻人启事的故事。

很久很久以前,他想寻一人,不得不知道她的所在地址,方能根据地址过去找到她。不幸的是,找到她了,但因操着不同语言而无法沟通,他又不得不找一个翻译来保证他与她之间的沟通顺利。很久很久以后,他想再寻一人却不知道她具体地址,他先守株待兔,看看她会不会突然冒出来和大家Say Hello,然后自己再跑上去搭讪。这种可能性貌似很小,除非她和自己一个小区。他拍脑袋一想,她如果在本市的话,肯定事先在派出所那边登记过资料了,于是就到拥有全市户口资料的派出所去打探,看看派出所那边能否提供她的资料并帮他们搭线上。

不得不承认,这是一个无聊的故事,和下面这个有的一拼。

WCF 3.5 中,当我们要调用一个服务时,必须事先知道该服务的地址,然后通过服务代理用双方约定好的契约与远程的服务进行交互。现在,WCF 4.0中提供了发现服务的支持,当我们再想调用一个服务时,没必要去知道该服务的具体地址,只需要利用 System.ServiceModel.Discovery 命名空间下的相关类就可以实现两种方式的动态发现服务:

Ad hoc Mode:简单理解,就是服务启动时就向网络广播Hello消息,调用方收到后进行回应建立通讯的模式。

Managed Mode:简单理解,就是所有服务事先在一个叫 Discovery Proxy 的地方登记,然后所有调用方发送查找请求给 Discovery Proxy 来查找并调用相关服务的模式。

这个故事到此为止,比喻不是很恰当,但至少可以有一个比较感性的认识吧。更详细,可以看下下面原理说明:

WCF 4.0中要动态发现服务,用 Ad hoc Mode 实现起来还是比较简单的,下面就以代码方式先看下如何实现。对于Managed Mode,就需要继承 System.ServiceModel.Discovery.DiscoveryProxy 抽象类去实现自己的 Discovery Proxy 了,这里先跳过不说了。

服务端:

  • 在服务的Behavior中加入 System.ServiceModel.Discovery.ServiceDiscoveryBehavior。
  • 添加一个服务端点 System.ServiceModel.Discovery.UdpDiscoveryEndpoint。

image

调用方:

  • 如果使用生成的服务代理时:
    • 用 System.ServiceModel.Discovery.DynamicEndpoint 根据服务契约和绑定来发现服务端点
    • 通过生成的服务代理类调用服务。

image 

image

  • 如果使用 ChannelFactory<> 时:
    • 通过 System.ServiceModel.Discovery.DiscoveryClient 去查找获取服务端点地址
    • 用 ChannelFactory<> 根据绑定和服务端点地址调用服务。

image

打印 | 张贴于 2009-10-24 10:25:26 | Tag:暂无标签

留言反馈

#Cheap viagra 编辑
Very nice site! <a href="http://aieopxy.com/osoxav/1.html">cheap viagra</a>
2009-12-18 08:46:25 | [匿名:Very nice site! <a href="http://aieopxy.com/osoxav/1.htm]

发表留言

标题
姓名
邮件
主页
留言 

Powered by: Joycode.MVC引擎 0.5.2.0