2010-08-21 3 views
8

ho creato un WCF REST (aka WebHttp) servizio in .NET 4, utilizzando il servizio di Template 40. Sto ospitando il servizio in IIS 6.servizio WCF REST ospitato in IIS non supporta PUT e DELETE

di Microsoft WCF REST

Il modello di servizio utilizza il RouteTable nel Global.asax come un modo per creare URL "puliti" che non includono ".svc" al loro interno. Per esempio:

http: // localhost/voli/878

GET e POST funzionare bene contro questo URL, ma PUT e DELETE risultato HTTP 501, "Non implementato".

Se creo un semplice file .svc come questo:

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

quindi posso usare PUT e DELETE contro questo URL:

http: // localhost/flightsservice.svc/878

Qualcuno sa se è possibile ottenere PUT e DELETE per lavorare contro l'URL "pulito" sopra? Sembra che non ci sia modo di configurare IIS per consentire questo perché non esiste un'estensione di file per configurare le impostazioni, e non voglio consentire PUT e DELETE a livello globale.

+0

vedere come un problema simile è stato risolto su IIS 7.5 [qui] (http://stackoverflow.com/questions/3745015/webdav -troubles-per-restfull-WCF-web-service). La soluzione è elegante. – lmsasu

risposta

4

Non ho lavorato con IIS6 da un po '(e non ho installato, quindi sto andando fuori memoria qui), ma ho dovuto implementare qualcosa di simile con IIS6 per il routing di URL senza estensione in IIS6.

È possibile abilitare i mapping di script con caratteri jolly su una cartella per singola cartella infettando IIS Manager. Questo blog post è quello che ho seguito e funziona davvero bene (e questo link fornisce un po 'più di sfondo). È davvero un bug nel Manager, non IIS stesso (almeno questo è quello che mi dico).

È possibile fare riferimento ai servizi in una sottocartella del sito (ad esempio http://localhost/services/flight/878)? Se è così, e se si implementa il trucco di IIS Manager sopra, penso che sia possibile abilitare tutti i verbi HTTP per quella directory. Di nuovo, ho perso memoria (e abbiamo implementato solo GET e POST, quindi non ho risolto PUT e DELETE), quindi spero di aver capito bene.

Fatemi sapere se avete bisogno di maggiori informazioni o se la mia memoria sta scivolando. :) Spero che aiuti!

+0

Grazie, ha funzionato! Poiché la mia applicazione IIS conterrà solo servizi, imposto la mappatura dei caratteri jolly per l'intera applicazione come descritto nel secondo link che hai postato. Grazie mille! Mike –

+0

Devi amare quelle caratteristiche "non documentate". :) Sono contento che abbia funzionato per te. –

2

Se l'applicazione Web viene distribuita in più ambienti di sviluppo/produzione, il modo migliore sembra essere disabilitare WebDAV a livello di web.config. Per fare questo, togliere la WebDAVModule e il gestore WebDAV come nell'esempio qui sotto:

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

la domanda era come abilitare PUT e DELETE in IIS a livello di applicazione. –

+1

Sì, questo farà sì che IIS lo consenta solo per l'applicazione corrente, senza attivarla globalmente, come richiesto dal poster originale. Se non si rimuove il modulo e il gestore WebDAV, le richieste PUT e DELETE verranno dirottate da loro e non funzioneranno. – DanilF