Поделиться через


Интеграция с System.Web.Routing

При размещении службы Windows Communication Foundation (WCF) в службах IIS SVC-файл размещается в виртуальном каталоге. Этот SVC-файл указывает фабрику узла службы, которую необходимо использовать, а также класс, реализующий эту службу. При составлении запросов к службе SVC-файл указывается в URI, например: https://contoso.com/EmployeeServce.svc. Для разработчиков служб REST такой тип URI не является оптимальным. URI для служб REST указывают определенный ресурс и обычно не имеют модулей. Компонент интеграции System.Web.Routing позволяет разместить службу WCF REST, которая будет отвечать на URI-запросы без расширения. Дополнительные сведения маршрутизации см. в разделе Маршрутизация.

Использование интеграции N:System.Web.Routing

Для использования функции интеграции System.Web.Routing с помощью класса ServiceRoute создайте один или несколько маршрутов и добавьте их в RouteTable в файле Global.asax. Это маршруты указывают относительные URI, по которым отвечает служба. Следующий пример показывает, как это сделать.

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.ServiceModel.Activation" %>
<%@ Import Namespace="System.ServiceModel.Web " %>

<script RunAt="server">
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    private void RegisterRoutes(RouteCollection routes)
    {
        routes.Add(new ServiceRoute("Customers", new WebServiceHostFactory(), typeof(Service))); 
   }
</script>

Все запросы направляются по относительному URI, который начинается с Customers службы Service.

В файл Web.config необходимо добавить модуль System.Web.Routing.UrlRoutingModule, установить атрибут runAllManagedModulesForAllRequests в значение true и добавить обработчик UrlRoutingHandler в элемент<system.webServer>, как показано в следующем примере.

<system.webServer>
      <modules runAllManagedModulesForAllRequests="true">
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </modules>
      <handlers>
        <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
      </handlers>
    </system.webServer>

Это позволит загрузить модуль и обработчик, которые необходимы для маршрутизации. Дополнительные сведения см. в разделе Маршрутизация. Необходимо также установить атрибут aspNetCompatibilityEnabled в значение true в элементе <serviceHostingEnvironment>, как показано в следующем примере.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
        <!-- ... -->
    </system.serviceModel>

Класс, реализующий службу, должен соответствовать требованиям к совместимости ASP.NET, как показано в следующем примере.

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service
    {
        // ...
    }

См. также

Основные понятия

Маршрутизация

Другие ресурсы

Модель веб-программирования HTTP WCF