2010-08-21 35 views
8

J'ai créé un REST WCF (alias WebHttp) service .NET 4, en utilisant service WCF REST Microsoft modèle 40. Je héberge le service dans IIS 6.service WCF REST hébergé dans IIS ne prend pas en charge PUT et DELETE

Le modèle de service utilise RouteTable dans Global.asax pour créer des URL «propres» qui ne contiennent pas «.svc». Par exemple:

http: // localhost/vol/878

GET et POST fonctionne très bien contre cette URL, mais PUT et DELETE résultat dans HTTP 501, "Non implémenté".

Si je crée un simple fichier .svc comme ceci:

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

alors je peux utiliser PUT et DELETE contre cette URL:

http: // localhost/flightsservice.svc/878

Est-ce que quelqu'un sait s'il est possible de faire fonctionner PUT et DELETE avec l'URL "clean" ci-dessus? Il semble qu'il n'y ait aucun moyen de configurer IIS pour permettre cela parce qu'il n'y a pas d'extension de fichier pour configurer les paramètres, et je ne veux pas autoriser PUT et DELETE globalement.

+0

Voyez comment un problème similaire a été résolu sur IIS 7.5 [ici] (http://stackoverflow.com/questions/3745015/webdav -troubles-pour-restfull-wcf-web-service). La solution est élégante. – lmsasu

Répondre

4

Je n'ai pas travaillé avec IIS6 depuis longtemps (et je ne l'ai pas installé, donc je m'en vais), mais j'ai dû implémenter quelque chose de similaire avec IIS6 pour router des URLs sans extension dans IIS6.

Vous pouvez activer les mappages de caractères génériques dans un dossier par dossier en piratant le Gestionnaire des services Internet. Ce blog post est ce que j'ai suivi et cela fonctionne très bien (et ce link fournit un peu plus de fond). C'est vraiment un bug dans le Manager, pas IIS lui-même (du moins c'est ce que je me dis).

Pouvez-vous référencer vos services dans un sous-dossier de votre site (par exemple http://localhost/services/flight/878)? Si c'est le cas, et si vous implémentez le hack du gestionnaire IIS ci-dessus, je pense que vous pouvez activer tous les verbes HTTP pour ce répertoire. Encore une fois, je quitte la mémoire (et nous avons seulement implémenté les GETs et les POST, donc je n'ai pas traité les PUT et DELETE), donc j'espère que je vais bien faire les choses. Faites-moi savoir si vous avez besoin de plus d'informations ou si ma mémoire glisse. :) J'espère que ça aide!

+0

Merci, cela a fonctionné! Étant donné que mon application IIS contiendra uniquement des services, j'ai défini le mappage générique pour l'application entière comme décrit dans le deuxième lien que vous avez publié. Merci beaucoup! Mike –

+0

Je dois aimer ces fonctionnalités "non documentées". :) Je suis content que ça a marché pour vous. –

2

Si votre application Web est déployée dans plusieurs environnements de développement/production, la meilleure solution semble être de désactiver WebDAV au niveau de web.config. Pour ce faire, retirez le WebDAVModule et le gestionnaire WebDAV comme dans l'exemple ci-dessous:

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

la question était de savoir comment activer PUT et DELETE dans IIS au niveau de l'application. –

+1

Oui, IIS l'autorisera uniquement pour l'application en cours, sans l'activer globalement, comme l'affiche d'origine l'a demandé. Si vous ne supprimez pas le module et le gestionnaire WebDAV, les requêtes PUT et DELETE seront piratées et ne fonctionneront pas. – DanilF

Questions connexes