2010-08-21 4 views
8

Ich habe einen WCF REST (aka WebHttp) Dienst in .NET 4, mit dem Microsoft WCF REST-Service-Vorlage 40. ich den Dienst in IIS bin Hosting 6.WCF REST-Dienst in IIS gehostet unterstützt keine PUT und DELETE

Die Servicevorlage verwendet die RouteTable in Global.asax, um "saubere" URLs zu erstellen, die keine ".svc" enthalten. Zum Beispiel:

http: // localhost/Flüge/878

GET und POST funktionieren gegen diese URL, aber PUT und DELETE Ergebnis in HTTP 501: "Nicht implementiert".

Wenn ich eine einfache SVC-Datei wie folgt aus:

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

dann kann ich PUT und DELETE gegen diese URL:

http: // localhost/flightsservice.svc/878

Weiß jemand, ob es möglich ist, PUT und DELETE gegen die obige "saubere" URL zu arbeiten? Es scheint, dass es keine Möglichkeit gibt, IIS so zu konfigurieren, dass dies zulässt, weil es keine Dateierweiterung gibt, für die Einstellungen konfiguriert werden können, und ich möchte PUT und DELETE nicht global zulassen.

+0

Sehen Sie, wie ein ähnliches Problem auf IIS 7.5 [hier] gelöst wurde (http://stackoverflow.com/questions/3745015/webdav -troubles-for-restfull-wcf-web-service). Die Lösung ist elegant. – lmsasu

Antwort

4

Ich habe nicht mit IIS6 in einer Weile gearbeitet (und ich habe es nicht installiert, so bin ich Speicher hier gehen), aber ich musste etwas ähnliches mit IIS6 für das Routing von erweiterungslosen URLs in IIS6 implementieren.

Sie können Platzhalter-Skriptzuordnungen auf Ordnerbasis aktivieren, indem Sie IIS-Manager hacken. Diese blog post ist, was ich befolgt habe und es funktioniert wirklich gut (und diese link bietet ein wenig mehr Hintergrund). Es ist wirklich ein Fehler im Manager, nicht IIS selbst (zumindest das sage ich mir selbst).

Können Sie Ihre Dienste in einem Unterordner auf Ihrer Website referenzieren (z. B. http://localhost/services/flight/878)? Wenn ja, und wenn Sie den IIS-Manager-Hack oben implementieren, denke ich, dass Sie alle HTTP-Verben für dieses Verzeichnis aktivieren können. Auch hier gehe ich aus dem Speicher (und wir haben nur GETs und POSTs implementiert, also habe ich mich nicht mit PUTs und DELETEs beschäftigt), also hoffe ich, dass ich das richtig mache.

Lassen Sie mich wissen, wenn Sie mehr Informationen benötigen oder wenn mein Gedächtnis rutscht. :) Ich hoffe das hilft!

+0

Danke, das hat funktioniert! Da meine IIS-Anwendung nur Dienste enthält, setze ich die Platzhalterzuordnung für die gesamte Anwendung wie im zweiten von Ihnen geposteten Link beschrieben. Vielen Dank! Mike –

+0

Ich muss diese "undokumentierten" Funktionen lieben. :) Froh, dass es für dich funktioniert hat. –

2

Wenn Ihre Webanwendung in mehreren Entwicklungs-/Produktionsumgebungen bereitgestellt wird, scheint die Deaktivierung von WebDAV auf der Ebene web.config am besten zu sein. Dazu entfernen Sie die WebDAVModule und den WebDAV-Handler, wie im folgenden Beispiel:

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

die Frage war, wie PUT und DELETE in IIS auf einer Anwendungsebene zu aktivieren. –

+1

Ja, dies führt dazu, dass IIS es nur für die aktuelle Anwendung zulässt, ohne es global zu aktivieren, wie das ursprüngliche Poster verlangt. Wenn Sie das WebDAV-Modul und den Handler nicht entfernen, werden PUT- und DELETE-Anfragen von diesen entführt und funktionieren nicht. – DanilF

Verwandte Themen