Подтвердить что ты не робот

Устранить .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-адресах?

4b9b3361

Ответ 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