Устранить .svc в URL-адресе службы WCF 4 с помощью маршрутов?
Я использую WCF 4 в IIS 7.5 и хочу исключить расширение .svc по умолчанию из URL всех моих служб RESTful. Я видел подходы, задокументированные с использованием модуля Url Rewrite и модуля IHttpModule, но я не хочу использовать эти подходы.
Я смутно знаком с концепцией маршрутов, представленной в ASP.NET MVC, и, как я понимаю, они теперь абстрагированы от MVC в Net 4 как System.Web.Routing. Но, глядя на документы, кажется, мне нужно добавить файл Global.asax в мой проект, который я не очень увлекаюсь. Есть ли другой способ справиться с этим?
Я также видел функцию активации на основе конфигурации, но это только, кажется, устраняет файл .svc, но по-прежнему требует использования .svc в URL-адресе моей службы.
Может ли кто-нибудь обобщить мои варианты здесь, не нуждаясь в .svc в моих URL-адресах?
Ответы
Ответ 1
Конечно, нет проблем: сначала прочитайте все о новых функциях WCF 4 в Разработчик Введение в Windows Communication Foundation 4.
То, что вы ищете, называется активацией без файлов. Это новая настройка в <system.serviceModel>
, которая выглядит примерно так:
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="/YourService"
service="SomeNamespace.YourService"/>
</serviceActivations>
</serviceHostingEnvironment>
В принципе, вся информация, которую вы имели бы в файле *.svc(путь, служба для вызова), теперь находится в этом разделе конфигурации.
Вы можете позвонить этой службе в
http://yourserver/virtualdirectory/YourService
теперь - не более *.svc, нет беспорядочной перезаписи URL и т.д. - это просто работает!
Обновление:, похоже, что это не так хорошо, если вы не заходите и не добавляете расширение *.svc к своему относительному пути - вид побеждает целую цель!
Если вы хотите зарегистрироваться с использованием маршрута ASP.NET, ознакомьтесь с
Будем надеяться, что вы сможете запустить и запустить свою службу без каких-либо расширений *.svc!
Ответ 2
Просто завершите ответ и добавьте еще одну точку. Вам потребуется такая же регистрация маршрута ASP.NET, как указано выше:
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("YourService",
new WebServiceHostFactory(), typeof(SomeNamespace.YourService)));
}
Чтобы получить эту работу, вам нужно добавить еще несколько вещей в web.config. Хостинг услуг должен быть настроен на совместимость с ASP.NET. Это можно сделать, добавив aspNetCompatibiliyEnabled = "true" к элементу serviceHostingEnvironment:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
Надеемся, что это прояснит и даст более легкое решение.
Ответ 3
Важное пояснение для IIS 7.5 и Framework 4.0:
Для работы модуля веб-маршрутизации для пула приложений требуется " Интегрированный режим", он не работает в "Классическом режиме"
Еще одна проблема, которую я обнаружил после переключения, заключается в том, что когда в "Интегрированном режиме" приложение разбилось при запуске, потому что у меня были модули, включенные в раздел < system.Web > .
Я исправил это, переместив модули в раздел конфигурации system.webServer > , который является новым для IIS 7