Condividi tramite


Integrazione di System.Web.Routing

Quando si ospita un servizio Windows Communication Foundation (WCF) in Internet Information Service (IIS), si inserisce un file con estensione svc nella directory virtuale. Questo file con estensione svc specifica la factory di host del servizio da utilizzare e la classe che implementa il servizio. Quando si inviano richieste al servizio, si specifica il file con estensione svc nell'URI, ad esempio: https://contoso.com/EmployeeServce.svc. Per i programmatori che scrivono servizi REST, questo tipo di URI non è ottimale. Gli URI per i servizi REST indicano una risorsa specifica e in genere non presentano estensioni. La funzionalità di integrazione System.Web.Routing consente di ospitare un servizio REST di WCF che risponde a URI sprovvisti di estensione. Per ulteriori informazioni su come eseguire il routing, vedere Routing.

Utilizzo dell'integrazione N:System.Web.Routing

Per utilizzare la funzionalità di integrazione System.Web.Routing, viene utilizzata la classe ServiceRoute per creare una o più route e aggiungerle a RouteTable in un file Global.asax. Queste route specificano i relativi URI a cui risponde il servizio. Nell'esempio seguente viene illustrato come effettuare questa operazione.

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

Tutte le richieste vengono indirizzato con un URI relativo che inizia con Customers al servizio Service.

Nel file Web.config è necessario aggiungere il modulo System.Web.Routing.UrlRoutingModule, impostare l'attributo runAllManagedModulesForAllRequests su true e aggiungere il gestore UrlRoutingHandler all'elemento <system.webServer>, come indicato nell'esempio seguente.

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

Vengono caricati un modulo e il gestore necessario per il routing. Per ulteriori informazioni, vedere Routing. È inoltre necessario impostare l'attributo aspNetCompatibilityEnabled su true nell'elemento <serviceHostingEnvironment>, come indicato nel codice seguente.

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

La classe che implementa il servizio deve abilitare i requisiti di compatibilità ASP.NET, come indicato nell'esempio seguente.

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

Vedere anche

Concetti

Routing

Altre risorse

Modello di programmazione HTTP Web WCF