** 应用 WSDK - 实践 WebServices 的路由和路由选择 **
小气的神
2002-11-18
Article Type: In-Depth
难度等级: 8/9
版本: 3.46
** 2. ** ** 定义路由文件和建立虚拟链接。 ** ** **
这里我们需要做下面两步工作,第一建立一个名为 ReferralSite 的虚拟目录 , 这个 Web Application 将作为一个路由器 (Router) ,这个应用中没有任何实现文件,只有一个 web.config 文件进行定义 httpHandlers 来扑捉用户请求的虚拟 WebServices — ReferralUrl.asmx ,另外一个是 Referral 的 Cache 文件 , 这个文件定义了具体的路由格式。
web.config 文件如下:
< configuration >
< system.web >
< httpHandlers >
< add verb ="*" path ="ReferralUrl.asmx"
type ="Microsoft.Web.Services.Routing.RoutingHandler,Microsoft.Web.Services,
Version=1.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" />
< microsoft.web.services >
< diagnostics >
< trace enabled ="false" input ="d:\\inputTrace.config"
output ="d:\\outputTrace.config" /> < referral >
< cache name ="ReferralCache.config" />
Referral 的 Cache 文件如下: (ReferralCache.config )
< r:referrals xmlns : r ="http://schemas.xmlsoap.org/ws/2001/10/referral">
< r:ref >
< r:for >
< r:exact > http://localhost/MyProject/WSDK/ReferralSite/ReferralUrl.asmx < r:if />
< r:go >
< r:via > http://localhost/MyProject/WSDK/WSReferral/Math.asmx < r:refId > uuid:5D2786DD-4087-4fbe-B166-406158638867
简单的说,就是从 ReferralUrl.asmx 转变到真正的 Web Services 文件 Math.asmx.
** 3. ** ** 产生客户端进行访问 **
这里我们需要创建一个客户端,其实客户端的代码可以不发生变化,同上面测试时用的一样。我们需要做的是什么,是让我们的客户端请求一个虚拟不存在的网络资源,也就是上面我们设立的 ReferralSite/ReferralUrl.asmx ,然后请求会经过路由器通过 Referral 到我们第一步测试 WebServices 时的 WSDK/WSReferral/Math.asmx 。 如下图示:
具体的做法是我们增加一个 app.config 文件,这样在我们使用 Proxy 类时,我们改变它请求的链接地址,让它访问 ReferralUrl.asmx
app.config 文件
< configuration >
< appSettings >
< add key ="MathURL"
value ="http://localhost:8080/MyProject/WSDK/ReferralSite/ReferralUrl.asmx" />
Proxy 类的代码进行如下的修改 ( 或者不用修改 ) :
public Service1() {
string urlSetting = System.Configuration.ConfigurationSettings.AppSettings["MathURL"];
if ((urlSetting != null )) {
this .Url = urlSetting;
}
else {
this .Url = "http://localhost/Myproject/WSDK/WSReferral/Math.asmx";
}
}
完成上述操作之后,保存并编译运行 F5 ,我敢保证运行在一台机器上,其计算 5+6 的速度是非常缓慢的,但如果没有错误,你可以看到和你第一次测试时一样的结果,但是如果你有 Dump 调试信息,或是进行 Trace 那么你从下面的两幅截图中可以非常清楚的看到究竟发生了什么 J
事实上你也可以将 ReferralSite 分布到另外一部机器上来做这个试验,效果是同样的,但我相信你会发现更多。这里我们看到实现一个 WS-Routing ,我们要做两件事,第一,建立一个 Web Application 设立一个 Router ,第二,我们要建立一个 Referral Cache ,这里面包含着要重定向的资源的 URL ,而它是一个 XML 文件进行描述的。
从这里我们也看到这样的 WS-Routing 和 WS-Referral 类似于一种路由和中转,未来的 WSDK 支持一种叫 ”Content-Based Routing” 的路由,这意味着我们可以从一个请求的 SOAP Message 的头信息 (Headers) 发现在消息体 (message Body) 中定义的路由信息。当消息体中的路由不断发生变化时,我想那就是一种非常奇妙和有趣的应用了。微软许诺之后的版本中会包含这个功能,我想我也非常的乐意在未来向你展示这个许诺的功能,的确很诱人。
好了,我想到了要暂时告别 WSDK Routing 功能的时候了,随着 WSDK 版本的不断更新,微软又会支持更多的有关 Web Services 的新协议。我相信在学习 WSDK 或 WS-XXXX 的过程中我们遇到失败和变化,但其中的体验依然值得拿出来分享。我仍然坚信:这个过程中的任何分享都将是十分快乐的一种体验。最后祝编程快乐!
相关文件下载: ** [WSDKRouting_Referral.zip 38K] **
特别:
本文原创, CSDN 署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
如果有问题或建议,请发电子邮件给 [email protected]