IIS7 URL 重写为 WCF 请求返回 404(反向代理)
本文关键字:代理 返回 重写 URL WCF 请求 IIS7 | 更新日期: 2023-09-27 18:33:39
我正在使用IIS7.5,.net 4.0。我在当地工作。
我已经安装了应用程序请求路由,Web Farm Framework,WebDeploy和UrlRewrite来设置反向代理。这在大多数情况下工作正常。
我有两个网站:
- 默认
- 网站(端口 80,应用程序池:默认应用程序池 (.net 4((和 目标(
- 端口 8085,应用池:目标应用池(我的标识,.net 4((。
我在 DefaultWeb Site 上有一个重写规则(按照 IIS.net 上的指示创建(,它将所有本地主机(端口 80(流量重定向到 localhost:8085,如上面的链接中所述。这适用于大多数文档类型(.aspx、.xap、.htm、.ico(,但对 MyService.svc 的请求失败。它返回 404。
需要明确的是:
当我将localhost:8085/MyService.svc粘贴到浏览器中时,我得到了请求的WCF页面。
当我将localhost/MyService.svc粘贴到浏览器中时,我得到一个404。
当我将localhost:8085/MyIcon.ico粘贴到浏览器中时,我得到了请求的资源。
当我将localhost/MyIcon.ico粘贴到浏览器中时,我得到了请求的资源。
.svc 是我发现的唯一返回 404 的文档类型。
我有两条可能相关的信息。
-
应用池。当我将 DefaultWeb Site 的应用程序池更改为 TargetAppPool 时,404 变为 500("无法映射路径'/'"(。进行此更改时,所有其他请求均成功。不确定这是否相关。
-
FREB(失败请求跟踪(日志。我找到了一个页面(http://blogs.msdn.com/b/asiatech/archive/2011/08/25/return-404-4-not-found-when-url-rewrite.aspx(,其中详细介绍了 FREB 日志中当 URL 重写比我的更成功(稍后失败(时的步骤。我无法找到如何为成功重写生成 FREB 日志(如果可能的话(,所以我只能将我的 FREB 日志与该博客上的日志进行比较。我可以在我的 FREB 日志中看到他们的步骤 21 (URL_CHANGED(,但没有看到 22 (URL_REWRITE_END(。我对这些日志没有足够的经验来注意到比这更重要的事情(欢迎提出建议(。
我的主要问题是:有谁知道为什么只重写请求 .svc 资源的 URL?
第二个问题是:有谁知道如何为成功的请求生成 FREB 日志(如果可能的话(?
谢谢
更新:
我已经更改了体系结构以尝试获取更多信息。
我已将目标网站移动到另一台电脑上,并安装了网络监视器Microsoft以捕获传入流量。
在我更改 url 重写规则以指向这个新网站之前,当我在新 PC 上向 MyService.svc 发出请求时,我得到了正确的响应。好。
一旦我更改了重写规则以将请求路由到新的目标网站,它就会像以前一样响应 (404(。我已经提出了 POST 和 GET 请求。网络监视器日志中没有任何请求的迹象(所有其他呼叫 -200、404 或其他 - 都显示在此日志中(。
这让我认为与 url 重写和 *.svc 请求不兼容。我尝试向MyService.asmx发出请求(已创建此文件(,它正确返回了一个页面,因此它仅限于*.svc。 有什么想法吗?
解决方案在目标网站的配置文件中。
在web.config(在Target应用程序中(中,有一个部分如下:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
.
我将其更改为:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
.
为此必须归功于 http://forums.iis.net/post/1956671.aspx(尽管他/她声称需要更改的是代理的配置,但我发现它是目标应用程序,而不是代理服务器(。
如果仍然无法运行它,请确保网站上没有充当反向代理的 WCF 处理程序。我通过添加反向代理的这个 web.config 来禁用它:
<system.webServer>
...
<handlers>
<remove name="svc-ISAPI-4.0_64bit" />
<remove name="svc-ISAPI-4.0_32bit" />
<remove name="svc-Integrated-4.0" />
</handlers>
</system.webServer>
因为重写似乎适用于所有资源,除了扩展名为 .svc 时,我会说这将是要关注的领域。
我会想象重写规则与您的其他资源匹配,但与您的服务不匹配,并且因为这些通常是正则表达式(通常很复杂(,我会说值得测试您使用 url 找到的任何规则。 有关如何查找 UrlRewrite 的正则表达式的详细信息,请参阅此处。
可能还值得以相同的心态查看任何出站规则。