Compatibilità con ASP.NET

L'esempio ASPNetCompatibility mostra come abilitare la modalità compatibilità ASP.NET in Windows Communication Foundation (WCF). I servizi in esecuzione in modalità di compatibilità ASP.NET partecipano completamente alla pipeline dell'applicazione ASP.NET e possono usare funzionalità ASP.NET quali autorizzazione file/URL, stato sessione e classe HttpContext. La classe HttpContext consente l'accesso a cookie, sessioni e ad altre funzionalità di ASP.NET. Questa modalità richiede che le associazioni usino il trasporto HTTP e che il servizio stesso debba essere ospitato in IIS.

In questo esempio, il client è un'applicazione console (un file eseguibile) e il servizio è ospitato da Internet Information Services (IIS).

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

Per l’esecuzione, questo esempio richiede un pool di applicazioni .NET Framework 4. Per creare un nuovo pool di applicazioni o modificare il pool di applicazioni predefinito, attenersi alla procedura seguente.

  1. Aprire il Pannello di controllo. Aprire l'applet Strumenti di amministrazione nell'intestazione Sistema e sicurezza. Aprire l'applet di Gestione Internet Information Services (IIS).

  2. Espandere il TreeView nel riquadro Connessioni. Selezionare il nodo Pool di applicazioni.

  3. Per impostare il pool di applicazioni predefinito per l'uso di .NET Framework 4 (che può causare problemi di incompatibilità con i siti esistenti), fare clic con il pulsante destro del mouse sulla voce di elenco DefaultAppPool e selezionare Impostazioni di base... . Impostare l'elenco a discesa Versione .NET Framework su .Net Framework v4.0.30128 (o versione successiva).

  4. Per creare un nuovo pool di applicazioni che usa .NET Framework 4 (per mantenere la compatibilità per le altre applicazioni), fare clic con il pulsante destro del mouse sul nodo Pool di applicazioni e selezionare Aggiungi pool di applicazioni... . Assegnare un nome al nuovo pool di applicazioni e impostare l'elenco a discesa Versione .NET Framework su .Net Framework v4.0.30128 (o versione successiva). Dopo avere eseguito i passaggi di installazione riportati di seguito, fare clic con il pulsante destro del mouse sull'applicazione ServiceModelSamples e scegliere Gestisci applicazione, Impostazioni avanzate.... Impostare Pool di applicazioni per il nuovo pool di applicazioni.

Questo esempio è basato su Introduzione, che implementa un servizio di calcolatrice. Il contratto ICalculator è stato modificato al contratto ICalculatorSession per consentire l'esecuzione di un set di operazioni mantenendo il risultato della sessione.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculatorSession
{
    [OperationContract]
    void Clear();
    [OperationContract]
    void AddTo(double n);
    [OperationContract]
    void SubtractFrom(double n);
    [OperationContract]
    void MultiplyBy(double n);
    [OperationContract]
    void DivideBy(double n);
    [OperationContract]
    double Result();
}

Usando questa funzionalità il servizio mantiene lo stato di ogni client, mentre vengono chiamate più operazioni del servizio per eseguire un calcolo. Il client può recuperare il risultato corrente chiamando Result e può azzerare il risultato chiamando Clear.

Il servizio usa la sessione ASP.NET per archiviare il risultato per ogni sessione client. Questo consente al servizio di mantenere il risultato della sessione per ogni client, su più chiamate al servizio.

Nota

Lo stato sessione ASP.NET e le sessioni WCF sono cose molto diverse. Per informazioni dettagliate sulle sessioni WCF, vedere Sessione.

Il servizio ha una dipendenza stretta dallo stato sessione ASP.NET e per funzionare correttamente richiede la modalità compatibilità di ASP.NET. Questi requisiti vengono espressi in modo dichiarativo applicando l'attributo AspNetCompatibilityRequirements.

[AspNetCompatibilityRequirements(RequirementsMode =
                       AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{
    double Result
    {  // store result in AspNet Session
       get {
          if (HttpContext.Current.Session["Result"] != null)
             return (double)HttpContext.Current.Session["Result"];
          return 0.0D;
       }
       set
       {
          HttpContext.Current.Session["Result"] = value;
       }
    }
    public void Clear()
    {
        Result = 0.0D;
    }
    public void AddTo(double n)
    {
        Result += n;
    }
    public void SubtractFrom(double n)
    {
        Result -= n;
    }
    public void MultiplyBy(double n)
    {
        Result *= n;
    }
    public void DivideBy(double n)
    {
        Result /= n;
    }
    public double Result()
    {
        return Result;
    }
}

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per arrestare il client.

0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.

  3. Una volta compilata la soluzione, eseguire Setup.bat per configurare l'applicazione ServiceModelSamples in IIS 7.0. La directory ServiceModelSamples deve essere visualizzata come applicazione IIS 7.0.

  4. Per eseguire l'esempio in una configurazione a computer singolo o tra computer, seguire le istruzioni in Eseguire gli esempi di Windows Communication Foundation.

Vedi anche