应用WSDK - 实践WebServices的路由和路由选择(下)

类别:.NET开发 点击:0 评论:0 推荐:

 应用WSDK 实践WebServices的路由和路由选择

 

小气的神

2002-11-18

 

Article Type: In-Depth 

难度等级:8/9       

版本:3.46


2.     定义路由文件和建立虚拟链接。

这里我们需要做下面两步工作,第一建立一个名为ReferralSite的虚拟目录,这个Web Application将作为一个路由器(Router),这个应用中没有任何实现文件,只有一个web.config文件进行定义httpHandlers来扑捉用户请求的虚拟WebServices — ReferralUrl.asmx,另外一个是ReferralCache文件,这个文件定义了具体的路由格式。

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>

 

ReferralCache文件如下:(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署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。

如果有问题或建议,请发电子邮件给[email protected]

本文地址:http://com.8s8s.com/it/it45876.htm