环境: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:文件或页面未找到
谢谢!
---更新--- 我自己找到了解决方案
---解决方案---
此行为是由Extensionless Url处理程序引起的。 这篇KB文章给了我很多帮助: 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" />
---跳过---
这已经为我解决了这个问题。
答案 0 :(得分:2)
这可能是您使用FormAuthentication
并尝试在不登录时访问服务的原因。
您可以在该条件下使用位置路径
<location path="srv.asmx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
答案 1 :(得分:0)
我有一个类似的问题,https://ws.qa.llsettlement.com/StandardNotificationReceiver/StandardNotificationReceiver.svc。在我的情况下,我针对其开发的服务器未重定向到HTTPS,但问题服务器却重定向到了HTTPS。因此,我首先需要通过HTTPS发送请求。这是通过将customBinding设置为使用<httpsTransport />
来完成的,然后使我可以通过HTTP将URL转换为HTTPS。