2010-08-21 147 views
8

我創建了一個WCF REST(又名WebHttp)服務在.NET 4中,使用微軟的WCF REST服務模板40.我在IIS 6WCF REST服務不支持PUT和DELETE

託管服務

服務模板使用Global.asax中的RouteTable作爲創建不包含「.svc」的「乾淨」URL的方式。例如:

的http://本地主機/航班/ 878

GET和POST做工精細反對這個URL,但在HTTP 501 PUT和DELETE結果, 「沒有實現」。

如果我創建一個簡單的.svc文件是這樣的:

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%> 

然後我可以使用PUT和DELETE針對此網址:

的http://本地主機/ flightsservice.svc/878

有誰知道是否有可能得到PUT和DELETE對上面的「乾淨」的URL工作?看起來沒有辦法配置IIS來允許這樣做,因爲沒有文件擴展名來配置設置,並且我不想全局允許PUT和DELETE。

+0

看到一個類似的問題是如何解決的在IIS 7.5 [這裏](http://stackoverflow.com/questions/3745015/webdav -troubles換問題的REST-WCF的Web服務)。該解決方案非常優雅。 – lmsasu 2010-09-19 13:28:44

回答

4

我有一段時間沒有與IIS6一起工作(我沒有安裝它,所以我在這裏關閉內存),但是我必須實現類似於IIS6的東西,才能在IIS6中路由無擴展的URL。

您可以通過黑客入侵IIS管理器來逐個文件夾地啓用通配符腳本映射。這blog post是我所遵循的,它的工作非常好(這link提供了更多的背景)。這是管理器中的一個錯誤,而不是IIS本身(至少這是我自己告訴的)。

您能否在您的網站的子文件夾中引用您的服務(例如http://localhost/services/flight/878)?如果是這樣,並且如果您在上面實現了IIS管理器,我認爲您可以爲該目錄啓用所有HTTP動詞。再次,我要離開內存(我們只實現了GET和POST,所以我沒有處理PUT和DELETE),所以我希望我能夠做到這一點。

讓我知道你是否需要更多的信息或者我的記憶是否滑落。 :) 我希望這有幫助!

+0

謝謝,這工作!由於我的IIS應用程序將僅包含服務,因此我爲您發佈的第二個鏈接中描述的整個應用程序設置了通配符映射。非常感謝!邁克 – 2010-08-23 17:41:44

+0

得愛這些「無證」的功能。 :) 很高興它對你有效。 – 2010-08-23 17:44:25

2

如果您的Web應用程序正在部署到多個開發/生產環境,那麼最好的方法似乎是在web.config級別禁用WebDAV。要做到這一點,取出WebDAVModule和WebDAV的處理程序,下面的例子:

<system.webserver> 
    <modules> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
    <remove name="WebDAV" /> 
    </handlers> 
</system.webserver> 
+1

問題是如何在應用程序級別的IIS中啓用PUT和DELETE。 – 2012-09-23 08:27:54

+1

是的,這將導致IIS允許它僅用於當前的應用程序,而不會像原始海報所要求的那樣在全局啓用它。如果你不移除WebDAV模塊和處理程序,PUT和DELETE請求將被它們劫持,並且不起作用。 – DanilF 2012-10-07 19:01:49