2

环境: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:找不到文件或页面

谢谢!

---更新---我自己找到了解决方案

- - 解决方案 - -

此行为是由无扩展 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 处理程序(其中之一)列在顶部。这意味着它是第一个有机会处理请求的人。所以它愉快地使用了我的“无扩展”网络服务调用。

*.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" />

--- 跳过 ---

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

4

2 回答 2

2

这可能是您使用FormAuthentication并尝试在未登录的情况下访问服务的原因。
您可以在这种情况下使用位置路径

  <location path="srv.asmx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
于 2013-03-25T10:03:34.783 回答
0

我有一个类似的问题,https://ws.qa.llsettlement.com/StandardNotificationReceiver/StandardNotificationReceiver.svc。在我的情况下,我开发的服务器没有重定向到 HTTPS,但问题服务器是。所以我最初需要通过 HTTPS 发送请求。这是通过将 customBinding 设置为 use 来实现的<httpsTransport />,然后我可以通过 HTTP 将 URL 转换为 HTTPS。

于 2019-08-22T16:30:48.477 回答