Прочитать на английском

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


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

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

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

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

ASP.NET (C#)
<%@ 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>, как показано в следующем примере.

XML
<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>, как показано в следующем примере.

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

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

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

См. также


Дополнительные ресурсы

Документация