Asp.net Web服务调用(asmx)重定向到default.aspx
环境:Windows Server 2012、IIS8、.Net 4 web应用程序。 当我这样调用web服务(AJAX调用)时: 我的请求被重定向(302)到 而不是调用getSomething方法 以前有人见过这个吗?就好像IIS(或框架?)不理解这是对*.asmx的请求,只是附加了默认文档 我得到的确切错误消息是: 错误404:找不到文件或页面 谢谢大家! ---更新--- 我自己找到了解决办法 ---解决方案--- 这种行为是由无扩展Url处理程序引起的。 这篇KB文章对我帮助很大: 我还没有尝试安装补丁(也许这是最简单的解决方案)。我刚刚重新安排了处理程序 对于受影响的站点,applicationHost.config(位于C:\Windows\System32\inetsrv\config下)具有以下内容: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文章对我帮助很大:
<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>