Интеграция с 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
{
// ...
}