- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AppFabric服务总线发现
HYPERLINK /zh-cn/magazine/gg232769.aspx /zh-cn/magazine/gg232769.aspx
AppFabric 服务总线发现
HYPERLINK /magazine/ee532098.aspx?sdmr=JuvalLowysdmi=authors Juval Lowy
HYPERLINK /mag201010Discovery 下载代码示例
在 2010 年 1 月的文章“通过发现查找新 WCF”( HYPERLINK /magazine/ee335779 /magazine/ee335779) 中,我介绍了 Windows Communication Foundation (WCF) 4 很有价值的发现功能。 WCF 发现本质上是一种面向 Intranet 的技术,因为地址信息是无法通过 Internet 进行广播的。
不过好在,使用动态地址以及分离地址轴上的客户端和服务同样适用于依靠服务总线接收客户端调用的服务。
幸运的是,您可以使用事件中继绑定替换用户数据报协议 (UDP) 多播请求并为发现和公告做准备。 这样,您可以将可发现服务的易于部署和服务总线的无阻碍连接这两种优势结合起来。 本文介绍我编写的一个用于支持服务总线发现(使其等效于 WCF 中内置的发现支持)的小框架,以及我的一组帮助程序类。 它还可以用作运行您自己的发现机制的示例。
AppFabric 服务总线背景知识
如果您不熟悉 AppFabric 服务总线,可以阅读以下几篇过去的文章:
“使用 .NET 服务总线”(2009 年 4 月) HYPERLINK /magazine/dd569756 /magazine/dd569756
“服务总线缓冲区”(2010 年 5 月) HYPERLINK /magazine/ee336313 /magazine/ee336313
解决方案体系结构
对于 WCF 的内置发现功能,存在用于发现交换的标准约定。 遗憾的是,这些约定被定义为内部约定。 自定义发现机制的第一步就是定义用于发现请求和回调的约定。 我定义的 IServiceBusDiscovery 约定如下所示:
??????????[ServiceContract]
public?interface?IServiceBusDiscovery
{
??[OperationContract(IsOneWay?=?true)]
??void?OnDiscoveryRequest(string?contractName,string?contractNamespace,
????Uri[]?scopesToMatch,Uri?replayAddress);
}
????????
发现端点支持单一操作 IServiceBusDiscovery。 使用 OnDiscoveryRequest,客户端可以发现支持某个特定约定的服务端点,就像使用常规 WCF 那样。 另外,客户端还可以传入一组要匹配的可选作用域。
服务应通过事件中继绑定支持发现端点。 客户端对支持发现端点的服务发出请求,请求这些服务回调客户端提供的回复地址。
?服务使用如下定义的 IServiceBusDiscoveryCallback 回调客户端:
??????????[ServiceContract]
public?interface?IServiceBusDiscoveryCallback
{
??[OperationContract(IsOneWay?=?true)]
??void?DiscoveryResponse(Uri?address,string?contractName,
????string?contractNamespace,?Uri[]?scopes);
}
????????
客户端提供一个支持 IServiceBusDiscoveryCallback 的端点,其地址是 OnDiscoveryRequest 的 replayAddress 参数。 所用的绑定应当是尽可能接近单播的单向中继绑定。 图 1 显示了发现顺序。
图 1 服务总线发现
图 1 中的第一步是客户端在支持 IServiceBusDiscovery 的发现端点引发一个发现请求事件。 在事件绑定的作用下,所有可发现服务都会收到此事件。 如果某个服务支持请求的约定,它会通过服务总线回调该客户端(图 1 中的步骤 2)。 客户端收到该服务端点(或多个端点)的地址后,便会继续调用该服务,就像使用常规服务总线调用那样(图 1 中的步骤 3)。
可发现的主机
很显然,支持这样一种发现机制(尤其是针对服务
文档评论(0)