Устранить .svc в URL-адресе службы WCF 4, используя маршруты - PullRequest
12 голосов
/ 20 июля 2010

Я использую WCF 4 в IIS 7.5 и хочу удалить расширение .svc по умолчанию из URL всех моих служб RESTful. Я видел подходы, документированные с использованием модуля перезаписи Url и модуля IHttpModule, но я не хочу использовать эти подходы.

Я смутно знаком с концепцией маршрутов, представленной в ASP.NET MVC, и, насколько я понимаю, они теперь абстрагированы от MVC в Net 4 как System.Web.Routing. Но, глядя на документы, кажется, мне нужно добавить файл Global.asax в мой проект, который мне не очень интересен. Есть ли другой способ справиться с этим?

Я также видел функцию активации на основе конфигурации, но это, кажется, только устраняет файл .svc, но все еще требует, чтобы я использовал .svc в URL-адресе моей службы.

Может ли кто-нибудь суммировать мои варианты здесь, чтобы не нуждаться в .svc в моих URL?

Ответы [ 3 ]

9 голосов
/ 20 июля 2010

Конечно, нет проблем: во-первых, прочитайте все о новых функциях 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, ознакомьтесь с документами MSDN по этой теме.Вы должны иметь что-то подобное при запуске своего приложения, в веб-приложении, которое будет global.asax.cs:

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))); 
}

Надеемся, что с этим вы сможете запустить свой сервис иработает без каких-либо расширений файлов * .svc!

5 голосов
/ 25 января 2013

Просто, чтобы обернуть ответ и добавить еще одно замечание. Вам понадобится та же регистрация маршрута 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" />

Надеюсь, это прояснит ситуацию и поможет легче найти решение.

1 голос
/ 30 января 2013

Важные разъяснения для IIS 7.5 и Framework 4.0:

Для работы модуля веб-маршрутизации требуется, чтобы пул приложений был установлен на « Интегрированный режим », он не работает в «Классическом режиме»

Еще одна проблема, с которой я столкнулся после переключения, заключается в том, что в «Интегрированном режиме» приложение аварийно закрывалось при запуске, поскольку в раздел <<em> system.Web > включены модули.

Я исправил это, переместив модули в раздел конфигурации <<strong> system.webServer >, новый для IIS 7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...