Служба REST WCF, размещенная в IIS, не поддерживает PUT и DELETE. - PullRequest
8 голосов
/ 21 августа 2010

Я создал службу WCF REST (он же WebHttp) в .NET 4, используя шаблон 40 службы Microsoft WCF REST. Я размещаю службу в IIS 6.

Шаблон службы использует RouteTable в Global.asax как способ создания «чистых» URL, которые не содержат в себе «.svc». Например:

http: // localhost / flight / 878

GET и POST отлично работают с этим URL, но PUT и DELETE приводят к HTTP 501, «Не реализовано».

Если я создам простой файл .svc, подобный этому:

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

тогда я могу использовать PUT и DELETE для этого URL:

http: // localhost / flightservice.svc / 878

Кто-нибудь знает, возможно ли заставить PUT и DELETE работать с «чистым» URL выше? Кажется, что нет способа настроить IIS, чтобы разрешить это, потому что нет расширения файла для настройки параметров, и я не хочу разрешать PUT и DELETE глобально.

Ответы [ 2 ]

4 голосов
/ 21 августа 2010

Я некоторое время не работал с IIS6 (и у меня его не установлено, поэтому у меня не хватает памяти), но мне пришлось реализовать нечто подобное с IIS6 для маршрутизации URL-адресов без расширений в IIS6.

Вы можете включить сопоставления сценариев с подстановочными знаками для папок по папкам, взломав IIS Manager.Это сообщение в блоге - это то, за чем я следовал, и оно работает очень хорошо (а эта ссылка обеспечивает немного больше информации).Это действительно ошибка в Менеджере, а не в самом IIS (по крайней мере, я об этом говорю).

Можете ли вы ссылаться на ваши службы в подпапке на вашем сайте (например, http://localhost/services/flight/878)? Если таки если вы реализуете взломать IIS Manager выше, я думаю, что вы можете включить все HTTP-глаголы для этого каталога. Опять же, я ухожу из памяти (и мы реализовали только GET и POST, поэтому я не имел дело с PUT и DELETE), поэтому я надеюсь, что я все правильно понимаю.

Дайте мне знать, если вам нужна дополнительная информация или у меня не хватает памяти. :) Надеюсь, это поможет!

2 голосов
/ 07 сентября 2012

Если ваше веб-приложение развертывается в нескольких средах разработки / производства, то, похоже, лучше всего отключить WebDAV на уровне web.config. Для этого удалите модуль WebDAVModule и обработчик WebDAV, как показано в следующем примере:

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