2013-03-25 141 views
2

环境:Windows Server 2012,IIS8,.Net 4 Web应用程序。 当我呼叫这样的网络服务(AJAX呼叫)时:http://site.com/srv.asmx/getSomething 我的请求被重定向(302)到http://site.com/srv.asmx/getSomething/Default.aspx 而不是调用getSomething方法。Web服务调用(asmx)重定向到default.aspx

有没有人见过这个?就好像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处理程序(其中之一)列在顶部。这意味着它是第一个有机会处理请求的人。所以它开心地使用我的“无延伸”的Web服务调用。

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

的问题是相同的http://forums.asp.net/t/1475462.aspx/1 – DmitryK 2013-03-25 10:07:02

+0

你是如何调用服务中使用位置路径? – 2013-03-25 10:39:06

+0

来自客户端的Ajax调用 – DmitryK 2013-03-25 11:09:22

回答

2

这可能是您使用​​并试图在未登录的情况下访问该服务的原因。
您可以在状态

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

我已经允许用户=“*”在之内(针对所有请求) – DmitryK 2013-03-25 10:36:55