环境:Windows Server 2012、IIS8、.Net 4 Web 应用程序。当我像这样调用 Web 服务(AJAX 调用)时:http: //site.com/srv.asmx/getSomething 我的请求被重定向(302)到http://site.com/srv.asmx/getSomething/Default。 aspx 而不是调用 getSomething 方法。
有没有人见过这个?就好像 IIS(或框架?)不明白这是对 *.asmx 的请求,只是附加了默认文档。
我收到的确切错误消息:
http://site.com/filenotfound.htm?aspxerrorpath=/srv.asmx/getSomething/default.aspx 错误 404:找不到文件或页面
谢谢!
---更新---我自己找到了解决方案
- - 解决方案 - -
此行为是由无扩展 URL 处理程序引起的。这篇知识库文章对我帮助很大:http: //support.microsoft.com/kb/2520479
我还没有尝试安装补丁(也许这是最简单的解决方案)。我刚刚重新安排了处理程序。
对于受影响的站点 applicationHost.config(位于 C:\Windows\System32\inetsrv\config 下)具有以下内容:
<location path="site.com">
<system.webServer>
<handlers>
<clear />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
--- 跳过 ---
如您所见 - ExtensionlessUrl 处理程序(其中之一)列在顶部。这意味着它是第一个有机会处理请求的人。所以它愉快地使用了我的“无扩展”网络服务调用。
*.asmx 处理程序也在下面,但它没有机会被调用。
因此,为了解决这个问题,我将无扩展 URL 处理程序移到了底部的第二个位置(就在静态文件处理程序的前面):
<system.webServer>
<handlers>
<clear />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
--- 跳过 ---
这已经为我解决了这个问题。