2013-03-25 50 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