环境:Windows Server 2012,IIS8,.Net 4 Web应用程序。 当我呼叫这样的网络服务(AJAX呼叫)时:http://site.com/srv.asmx/getSomething 我的请求被重定向(302)到http://site.com/srv.asmx/getSomething/Default.aspx 而不是调用getSomething方法。Web服务调用(asmx)重定向到default.aspx
有没有人见过这个?就好像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处理程序(其中之一)列在顶部。这意味着它是第一个有机会处理请求的人。所以它开心地使用我的“无延伸”的Web服务调用。
* .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" />
---跳过---
这已经解决了我的这个问题。
的问题是相同的http://forums.asp.net/t/1475462.aspx/1 – DmitryK 2013-03-25 10:07:02
你是如何调用服务中使用位置路径? – 2013-03-25 10:39:06
来自客户端的Ajax调用 – DmitryK 2013-03-25 11:09:22