Integración de System.Web.Routing

Al hospedar un servicio de Windows Communication Foundation (WCF) en Internet Information Service (IIS), se coloca un archivo .svc en el directorio virtual. Este archivo .svc especifica el generador de host de servicio que se debe usar, así como la clase que implementa el servicio. Al realizar solicitudes al servicio, debe especificar el archivo .svc en el URI, por ejemplo: https://contoso.com/ServicioDeEmpleados.svc. Para programadores que escriben servicios de REST, este tipo de URI no es óptimo. Los URI para los servicios de REST especifican un recurso determinado y normalmente no tienen ninguna extensión. La característica de integración del espacio de nombres System.Web.Routing le permite hospedar un servicio de REST de WCF que responde a URI sin extensión. Para obtener más información sobre el enrutamiento, vea Enrutar.

Usar la integración de N:System.Web.Routing

Para usar la característica de integración de System.Web.Routing, utilice la clase ServiceRoute para crear una o más rutas y agregarlas a RouteTable en un archivo Global.asax. Estas rutas especifican los URI relativos a los que responde el servicio. En el ejemplo siguiente, se muestra cómo hacerlo.

<%@ 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>

Esto enruta todas las solicitudes con un URI relativo que empiece por Customers (Clientes) al servicio Service.

En el archivo Web.config, debe agregar el módulo System.Web.Routing.UrlRoutingModule, establecer el atributo runAllManagedModulesForAllRequests como true y agregar el controlador UrlRoutingHandler al elemento <system.webServer>, tal y como se muestra en el siguiente ejemplo.

<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>

Esto carga un módulo y el controlador requerido para el enrutamiento. Para obtener más información, vea Enrutar. También debe establecer el atributo aspNetCompatibilityEnabled como true en el elemento <serviceHostingEnvironment>, tal y como se muestra en el siguiente ejemplo.

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

La clase que implementa el servicio debe habilitar los requisitos de compatibilidad de ASP.NET, tal y como se muestra en el siguiente ejemplo.

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

Vea también

Conceptos

Enrutar

Otros recursos

Modelo de programación de web HTTP de WCF