Intégration de System.Web.Routing
Lorsque vous hébergez un service Windows Communication Foundation (WCF) dans les services IIS (Internet Information Services), vous placez un fichier .svc dans le répertoire virtuel. Ce fichier .svc spécifie la fabrique hôte de service à utiliser ainsi que la classe qui implémente le service. Lorsque vous faites des demandes au service, vous spécifiez le fichier .svc dans l'URI, par exemple: https://contoso.com/EmployeeServce.svc. Pour les programmeurs qui écrivent des services REST, ce type d'URI n'est pas optimal. Les URI des services REST spécifient une ressource spécifique et n'ont généralement pas d'extension. La fonctionnalité d'intégration System.Web.Routing vous permet d'héberger un service WCF REST qui répond aux URI sans extension. Pour plus d'informations sur le sujet suivant le routage, consultez Routage.
Utilisation de l'intégration N:System.Web.Routing
Pour utiliser la fonctionnalité d'intégration System.Web.Routing, vous utilisez la classe ServiceRoute pour créer un ou plusieurs itinéraires et les ajouter à l'objet RouteTable dans un fichier Global.asax. Ces itinéraires spécifient les URI relatifs auxquels le service répond. L'exemple suivant montre comment effectuer cette opération.
<%@ 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>
Ce code route toutes les demandes avec un URI relatif commençant par Customers vers le service Service
.
Dans votre fichier Web.config, vous devez ajouter le module System.Web.Routing.UrlRoutingModule
, affecter à l'attribut runAllManagedModulesForAllRequests
la valeur true
et ajouter le gestionnaire UrlRoutingHandler
à l'élément <system.webServer>
, comme le montre l'exemple suivant.
<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>
Ce code charge un module et un gestionnaire nécessaires pour le routage. Pour plus d'informations, consultez Routage. Vous devez également affecter à l'attribut aspNetCompatibilityEnabled
la valeur true
dans l'élément <serviceHostingEnvironment>
, comme illustré dans l'exemple suivant.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- ... -->
</system.serviceModel>
La classe qui implémente le service doit activer les spécifications de compatibilité ASP.NET, comme indiqué dans l'exemple suivant.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service
{
// ...
}