应用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 文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<!-- This installs the HttpHandler which implements the WSDK's SOAP router -->
<httpHandlers>
<add verb="*" path="ReferralUrl.asmx"
type="Microsoft.Web.Services.Routing.RoutingHandler,Microsoft.Web.Services,
Version=1.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>
</system.web>
<!-- This is the WSDK configuration section -->
<microsoft.web.services>
<diagnostics>
<trace enabled="false" input="d:\\inputTrace.config"
output="d:\\outputTrace.config" />
</diagnostics>
<referral>
<cache name="ReferralCache.config" />
</referral>
</microsoft.web.services>
</configuration>
Referral的Cache文件如下:(ReferralCache.config )
<?xml version="1.0" ?>
<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:exact>
</r:for>
<r:if />
<r:go>
<r:via>http://localhost/MyProject/WSDK/WSReferral/Math.asmx</r:via>
</r:go>
<r:refId>uuid:5D2786DD-4087-4fbe-B166-406158638867</r:refId>
</r:ref>
</r:referrals>
简单的说,就是从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" />
</appSettings>
</configuration>
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署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
如果有问题或建议,请发电子邮件给new2001@msn.com