Web服务调用(asmx)重定向到default.aspx

时间:2013-03-25 09:56:38

标签: asp.net web-services iis

环境: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" />

---跳过---                                               

这已经为我解决了这个问题。

2 个答案:

答案 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。