我正在使用 IIS7.5、.net 4.0。我在当地工作。
我已经安装了 Application Request Routing、Web Farm Framework、WebDeploy 和 UrlRewrite 来设置反向代理。这在大多数情况下都可以正常工作。
我有两个网站:
- DefaultWebSite(端口 80,应用程序池:默认应用程序池 (.net 4))和
- 目标(端口 8085,应用程序池:TargetAppPool(我的身份,.net 4))。
我在 DefaultWebSite 上有一个重写规则(按照IIS.net的指示创建),它将所有 localhost(端口 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 的文档类型。
我有两条可能相关的信息。
应用程序池。当我将 DefaultWebSite 的应用程序池更改为 TargetAppPool 时,404 变为 500(“无法映射路径'/'”)。进行此更改时,所有其他请求均成功。不确定这是否相关。
FREB(失败的请求跟踪)日志。我找到了一个页面(http://blogs.msdn.com/b/asiatech/archive/2011/08/25/return-404-4-not-found-when-url-rewrite.aspx),其中详细说明了步骤当 URL 重写比我的更成功时(它稍后会失败)时的 FREB 日志。我无法找到如何生成 FREB 日志以成功重写(如果可能的话),所以我只能将我的 FREB 日志与该博客上的日志进行比较。我可以在我的 FREB 日志中看到他们的第 21 步(URL_CHANGED),但不是第 22 步(URL_REWRITE_END)。我对这些日志没有足够的经验来注意到比这更重要的事情(欢迎提出建议)。
我的主要问题是:有谁知道为什么只是请求 .svc 资源的 URL 没有被重写?
第二个问题是:有谁知道如何为成功的请求生成 FREB 日志(如果可能的话)?
谢谢
更新:
我已更改架构以尝试获取更多信息。
我已将 Target 网站移至另一台安装了 Microsoft 网络监视器以捕获传入流量的 PC。
在我更改 url-rewrite 规则以指向这个新网站之前,当我在新 PC 上向 MyService.svc 发出请求时,我得到了正确的响应。美好的。
一旦我更改了重写规则以将请求路由到新的 Target 网站,它就会像以前一样响应 (404)。我已经发出了 POST 和 GET 请求。网络监视器日志中没有任何请求的迹象(所有其他调用 -200、404 或其他 - 出现在此日志中)。
这让我认为有些东西与 url-rewrites 和 *.svc 请求不兼容。我尝试向 MyService.asmx 发出请求(已创建此文件)并且它正确返回了一个页面,因此它仅限于 *.svc。有任何想法吗?