MS.Tech - IT人

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

导航

关于

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

标签

每月存档

最新留言

广告

WCF 4.0 中的 Discovery - 动态发现服务

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

很久很久以前,他想寻一人,不得不知道她的所在地址,方能根据地址过去找到她。不幸的是,找到她了,但因操着不同语言而无法沟通,他又不得不找一个翻译来保证他与她之间的沟通顺利。很久很久以后,他想再寻一人却不知道她具体地址,他先守株待兔,看看她会不会突然冒出来和大家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

posted on 2009-10-24 10:25:26 by liuhuimiao  评论(1) 阅读(2293)

VS 2010 Beta2 编辑器字体问题

顺利装好 VS 2010 Beta2 后,新建项目,打开.cs代码文件,结果报错误。不仅仅是代码文件,只要是相关的文件,如 xml, .config等均报此错误。

clip_image002

按照提示,用 /Log 参数启动VS IDE,查阅Log说是 Editor 问题导致此错误。后来核对了半天,才发现原来我在 VS 2008 中设置编辑器字体为 Fixedsys 字体,安装完 VS 2010 后将这个设置也带来过,结果目前 VS2010 Beta2 好像还不支持编辑器字体替换,换回“新宋体”或 Arial 等其他字体后,就没有再出现此错误了,所有代码文件都顺利打开。

造成这个问题的原因是因为VS 2010 整个 IDE 已经基于 WPF 重写,因此只支持 True Type 字体,而之前用的 Fixedsys 字体并非此类型,所以就报错导致所有文件都无法打开。后来了解到在更新版本里头,如果碰到不是 True Type 字体,就会自动转换成默认字体显示了。

posted on 2009-10-22 01:30:47 by liuhuimiao  评论(4) 阅读(2151)

Powered by: Joycode.MVC引擎 0.5.2.0