6

我试图弄清楚如何使用 url 重写和应用程序请求路由 (ARR) 在同一服务器上的不同应用程序池中进行重写。

在一个简化版本中,这是我所拥有的:一个 REST 服务 API 使用 2 个虚拟目录 Service.A 和 B 实现,因此虚拟目录是访问资源 A 和 B 的 url 的一部分

获取 [https://]api.mycompany.com/Service.A/A

获取 [https://]api.mycompany.com/Service.B/B

我想要实现的是为 api 提供一个没有虚拟目录名称的外部 url,并且显然不必进行代码重构(合并解决方案文件和构建)

获取 [https://]api.mycompany.com/A

获取 [https://]api.mycompany.com/B

我实现了一个 url 重写规则来匹配路径中的 /A 并替换为 /Service.A/A,在默认网站级别的 web.config 中使用类似这样的代码,效果很好。

    <rewrite>

            <rule name="AddServicePrefix" enabled="true">

                <match url="^A[/]?.*" />

                <action type="Rewrite" url="/Service.A/{R:0}" />

            </rule>

    </rewrite>

问题是,当我将不同的应用程序池分配给 Service.A(来自默认网站的应用程序池)时,这将立即失败并出现 403 错误,但这是我们这边运行应用程序/虚拟目录的要求在不同的应用程序池下,以最大程度地减少任何池发生故障或回收时的影响。

我做了一些研究。下面的上一篇文章基本上说“如果你想将请求重新路由到另一个应用程序池,你必须进行一个跃点,无论该跃点是通过 winsock 还是命名管道或其他任何东西”,但没有太多细节。我也浏览了 ARR 指南,但无法弄清楚如何在这种情况下使用 ARR。

http://forums.iis.net/t/1151510.aspx?Rewrite+across+application+pools+

有什么帮助吗?建议和意见是否我在正确的方向?

谢谢!

哦,忘了说环境:目前在开发环境中,Windows 7 上的 IIS 7.5,Url Rewrite 2.0 和 ARR 3.0,由 Web Platform Installer 安装。

4

0 回答 0