webservice的URL重写之UrlRewriter学习小结

在项目开发应用中,经常需要用到URL重定向技术。

以下文字主要介绍我用.net开发的webservice,在IIS6.0中使用URLRewriter实现重定向的具体过程以及遇到的问题。

问题描述:

在.net和JAVA的跨平台开发中,Java开发的webservice大多结尾无扩展名,而.net开发的webservice扩展名变为“.asmx”。如今需要用.net的服务替换java的旧系统。如果让调用方变动调用地址,很是麻烦,需要使用URL重定向技术解决。

方法:URLRewriter实现URL重定向。

步骤:

  1. 下载开源代码:http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
  2. 下载后安装到指定文件夹(默认C:\Program Files\URL Rewriting in ASP.NET)后,用Visual Studio打开解决方案,编译项目URLRewriter和ActionlessForm,分别生成URLRewriter.dll和ActionlessForm.dll (里面也有编译好的,自己找吧),还提供了其他参考学习资料,可以研究下。
  3. 添加引用UrlRewriter.dll 到您的项目bin目录下。
  4. 在asp.net项目的web.config下配置使用。
    • 在Web.Config的<configuration>和</configuration>添加以下节点:
    <configSections>    
  5. <section name="RewriterConfig" 
  6. type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
  7.  </configSections>  
    • 在Web.Config的<system.web>和</system.web>添加以下节点:
    <httpModules>        
  8. <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> 
  9.  </httpModules>  
    <!—<httpHandlers>  
  10.  <add verb="*" path="*.aspx"      
  11.    type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
  12. </httpHandlers>-->
    注释掉 <httpModules> 条目,以使用 HTTP 模块执行重写;
  13. 注释掉 <httpHandlers> 条目,以使用 HTTP 处理程序执行重写。

    其中指明要使用 HTTP 模块还是 HTTP 处理程序来执行 URL 重写。 我们的asmx应该为httpModules 模式,使用另外的会报错。

    • Web.config 配置重写规则,和configSections同级,放在下面。
    <RewriterConfig>  
  14.  <Rules>   <RewriterRule>     
  15.  <LookFor>要查找的模式</LookFor>   
  16.    <SendTo>要用来替换模式的字符串</SendTo>  
  17.  </RewriterRule>   <RewriterRule>    
  18.   <LookFor>要查找的模式</LookFor>     
  19.  <SendTo>要用来替换模式的字符串</SendTo>  
  20.  </RewriterRule>   ...   </Rules></RewriterConfig>

    每个重写规则均由 <RewriterRule> 元素表达。要搜索的模式由 <LookFor> 元素指定,而要替换所找到的模式的字符串将在 <SentTo> 元素中输入。这些重写规则将从头到尾进行计算。如果发现与某个规则匹配,URL 将被重写,并且对重写规则的搜索将会终止。

    在 <LookFor> 元素中指定模式时,请注意,要使用正则表达式来执行匹配和字符串替换。

    以下为我实际配置:

    <RewriterConfig>   

  21.  <Rules>     
  22.  <RewriterRule>   
  23.      <LookFor>~/(.+)</LookFor>      
  24.   <SendTo>~/index.asmx</SendTo>   
  25.    </RewriterRule>   
  26.  </Rules> 
  27. </RewriterConfig>
  28. IIS 中配置无扩展名的URLRewriter实现
  • 打开IIS,在扩展名影射中,扩展名:.*,处理程序aspnet_isapi。

1

总结:如果要配置出更多其他效果,请熟悉掌握正则表达式,以及参阅URLRewriter的官方文档。

本人在2处上费了神:

1、HTTP 处理方式节点上配置错误。导致asmx始终无法正常运行,而aspx等正常。

2、无扩展名的配置上,映射那里一直在添加按钮徘徊,没找准通配符的位置。望大家一步成功噢!

此条目发表在学习笔记分类目录。将固定链接加入收藏夹。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据