2012-08-27 102 views
4

我遇到500 - 內部服務器錯誤PUT/DELETE帶有Windows 2008服務器IIS時。我得到的迴應是:PUT和DELETE在Windows 2008服務器IIS 7和7.5中爲asp.net webapi返回404

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
<title>500 - Internal server error.</title> 
<style type="text/css"> 
<!-- 
Formatting 
--> 
</style> 
</head> 
<body> 
<div id="header"><h1>Server Error</h1></div> 
<div id="content"> 
<div class="content-container"><fieldset> 
    <h2>500 - Internal server error.</h2> 
    <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3> 
</fieldset></div> 
</div> 
</body> 
</html> 

當我檢查我的WebAPI的我的自定義日誌,我發現呼叫尚未連撞服務。

我以前的經驗是404 - 未找到PUTDELETE並且此行爲在Win7和Win 2008 Server中保持一致。對於I found this fix:

我修補程序應用和PUT/DELETE適用於Windows 7,但在那之後在WIN2008服務器IIS 7部署相同的服務時,我沒有得到400.但我得到「500 - 內部服務器錯誤」從IIS甚至在此之前。

相同的代碼在Windows 7(IIS 7.5)上完美工作。

解決此類問題的任何線索?

編輯2012年8月29日:

通過啓用故障跟蹤在IIS7檢測500內部服務器錯誤的問題。修復就是這種配置。

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="WebDAVModule" /> 
</modules> 
<handlers> 
    <remove name="WebDAV" /> 
</handlers> 

基本上,我們需要從模塊從處理程序中移除「WebDAVModule」,也移除「的WebDAV」。但現在我回到我的老問題404-Not Found。現在,即使具有以下配置我不能讓建成後/ DELETE工作:

<remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 

不同尋常的同一Web應用程序完美的作品在同一系統上分別託管(不屬於默認的Web站點)相同的IIS。所以我懷疑這是由於某些父母網站配置過濾PUT/DELETE請求。

任何想法都一樣嗎?

+0

請不要將更正發佈爲評論。您可以使用問題底部的** edit **鏈接,然後解決問題。謝謝。 – Nate

+0

看起來像這個問題沒有解決方案 – Sando

回答

3

苦苦思索一個非常類似的問題後,我來到這個解決方案: http://www.iis.net/configreference/system.webserver/security/requestfiltering/verbs

使用請求篩選設置,我能夠在全球範圍內允許PUT和DELETE在IIS動詞,它解決了我的問題。它結束了我404.6錯誤的噩夢。 (順便說一下,我沒有安裝webDAV,並確實將動詞添加到ExtensionlessUrlHandler)

希望此信息可以爲某人節省一些時間。

+4

更多的微軟的*「默認打破」*系統。 –

0

嘗試通過增加

<customErrors mode="Off" /> 

打開自定義錯誤您將看到500錯誤的實際原因,當你瀏覽到API控制器,例如:http://staging.site.com/api/book

您可以從實際的異常消息中找到更多線索。

1

我的Win Server 2008 R2/IIS 7.5最近有同樣的問題,我花了幾個小時才發現它是由LiveStreamingHandler引起的。 LiveStreamingHandler IIS上的模塊導致PUTDELETE HTTP動詞錯誤。

卸載媒體服務4.1添加和刪除程序並重新啓動服務器修復此問題。希望這可以幫助別人。

2

我讓尼爾S`信息更準確:

  1. 從 「模塊」
  2. 刪除的WebDAV從 「處理程序映射」 刪除WebDAV的
  3. 我從IIS組件刪除的WebDAV確保WebDAV的不存在,重新啓動Windows
  4. 轉到「處理程序映射」,找到ExtensionlessUrlHandler(32和64和集成),打開它,去「請求限制離子「的第二章」動詞「,並把你需要的一些方法的字符串。我有下一個: GET,HEAD,POST,DEBUG,PUT 我重複三個「ExtensionlessUrlHandler」狀態的更改。
  5. 我不更改請求篩選設置

所以,Put方法404和405錯誤是消失了,我收到200個狀態。

此解決方案適用於我。

相關問題