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

Asp.net Web服务调用(asmx)重定向到default.aspx,asp.net,web-services,iis,Asp.net,Web Services,Iis,环境:Windows Server 2012、IIS8、.Net 4 web应用程序。 当我这样调用web服务(AJAX调用)时: 我的请求被重定向(302)到 而不是调用getSomething方法 以前有人见过这个吗?就好像IIS(或框架?)不理解这是对*.asmx的请求,只是附加了默认文档 我得到的确切错误消息是: 错误404:找不到文件或页面 谢谢大家! ---更新--- 我自己找到了解决办法 ---解决方案--- 这种行为是由无扩展Url处理程序引起的。 这篇KB文章对我帮助很大:

环境:Windows Server 2012、IIS8、.Net 4 web应用程序。 当我这样调用web服务(AJAX调用)时: 我的请求被重定向(302)到 而不是调用getSomething方法

以前有人见过这个吗?就好像IIS(或框架?)不理解这是对*.asmx的请求,只是附加了默认文档

我得到的确切错误消息是:

错误404:找不到文件或页面

谢谢大家!

---更新--- 我自己找到了解决办法

---解决方案---

这种行为是由无扩展Url处理程序引起的。 这篇KB文章对我帮助很大:

我还没有尝试安装补丁(也许这是最简单的解决方案)。我刚刚重新安排了处理程序

对于受影响的站点,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处理程序从底部移动到第二个位置(就在静态文件处理程序前面):


---跳过---


这为我解决了这个问题。

这可能是您正在使用
进行身份验证
并尝试在不登录的情况下访问服务的原因。
在这种情况下,可以使用位置路径

  <location path="srv.asmx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>


我也有类似的问题。在我的例子中,我开发的服务器没有重定向到HTTPS,但问题服务器是。所以我需要首先通过HTTPS发送请求。这是通过将customBinding设置为使用
,然后允许我通过HTTP将URL转换为HTTPS来实现的。

问题与您调用服务的方式相同?来自客户端的Ajax调用您是否能够直接访问它意味着将其键入URL?我已经在其中包含allow users=“*”(对于所有请求)
  <location path="srv.asmx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>