Я создал REST WCF (он же WebHttp) службы в .NET 4, используя шаблон службы Microsoft REST WCF 40. Я размещаю службу в 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 глобально.
Я давно не работал с IIS6 (и у меня он не установлен, поэтому я теряю память), но мне пришлось реализовать что-то подобное с IIS6 для маршрутизация URL-адресов без расширений в IIS6.
Вы можете включить сопоставление сценариев с подстановочными знаками для каждой папки, взломав диспетчер IIS. Я следил за этой записью в блоге , и она работает очень хорошо (и эта ссылка дает немного больше информации). Это действительно ошибка в диспетчере, а не в самом IIS (по крайней мере, так я себе говорю).
Можете ли вы ссылаться на свои службы в подпапке на вашем сайте (например, http: // localhost / services / flight / 878 )? Если это так, и если вы реализуете взлом IIS Manager, описанный выше, я думаю, вы можете включить все HTTP-команды для этого каталога. Опять же, я теряю память (а мы реализовали только GET и POST, поэтому я не занимался PUT и DELETE), поэтому я надеюсь, что у меня все правильно.
Дайте мне знать, если вам понадобится дополнительная информация, или если я ускользаю из памяти. :) Надеюсь, это поможет!