ASP.NET-Kompatibilität

Das ASPNetCompatibility-Beispiel veranschaulicht, wie der ASP.NET-Kompatibilitätsmodus in Windows Communication Foundation (WCF) aktiviert wird. Dienste, die im ASP.NET-Kompatibilitätsmodus ausgeführt werden, nehmen vollständig an der ASP.NET-Anwendungspipeline teil und können ASP.NET-Funktionen, wie Datei-/URL-Autorisierung, Sitzungsstatus und die Klasse HttpContext nutzen. Die Klasse HttpContext lässt Zugriff auf Cookies, Sitzungen und andere ASP.NET-Funktionen zu. Dieser Modus erfordert, dass die Bindungen den HTTP-Transport verwenden und der Dienst selbst in IIS gehostet ist.

In diesem Beispiel ist der Client eine Konsolenanwendung (eine ausführbare Datei), und der Dienst wird in Internetinformationsdiensten (IIS) gehostet.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Damit das Beispiel ausgeführt werden kann, muss ein .NET Framework 4-Anwendungspool verfügbar sein. Führen Sie die folgenden Schritte aus, um einen neuen Anwendungspool zu erstellen oder den Standardanwendungspool zu ändern.

  1. Öffnen Sie die Systemsteuerung. Öffnen Sie Verwaltung unter der Überschrift System und Sicherheit. Öffnen Sie das Applet Internetinformationsdienste (IIS)-Manager.

  2. Erweitern Sie die Strukturansicht im Bereich Verbindungen. Wählen Sie den Knoten Anwendungspools aus.

  3. Wenn Sie den Standardanwendungspool auf .NET Framework 4 festlegen möchten (dies verursacht möglicherweise Inkompatibilitätsprobleme mit vorhandenen Websites), klicken Sie mit der rechten Maustaste auf das Listenelement DefaultAppPool, und wählen Sie Grundeinstellungen... aus. Legen Sie in der Pulldownliste .NET Framework-Version die Version .NET Framework v4.0.30128 (oder höher) fest.

  4. Um einen neuen Anwendungspool zu erstellen, der .NET Framework 4 verwendet (um die Kompatibilität mit anderen Anwendungen beizubehalten), klicken Sie mit der rechten Maustaste auf den Knoten Anwendungspools, und wählen Sie Anwendungspool hinzufügen... aus. Benennen Sie den neuen Anwendungspool, und legen Sie in der Pulldownliste .NET Framework-Version die Version auf .NET Framework v4.0.30128 (oder höher) fest. Klicken Sie nach Ausführung der Setupschritte unten mit der rechten Maustaste auf die Anwendung ServiceModelSamples, und wählen Sie Anwendung verwalten, Erweiterte Einstellungen... aus. Legen Sie Anwendungspool auf den neuen Anwendungspool fest.

Dieses Beispiel basiert auf Erste Schritte, wobei ein Dienst für einen Taschenrechner implementiert wird. Der ICalculator-Vertrag wurde als ICalculatorSession-Vertrag geändert, damit eine Reihe von Vorgängen ausgeführt werden kann, während ein Zwischenergebnis aufbewahrt wird.

[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();
}

Während mehrere Dienstvorgänge zum Ausführen einer Berechnung aufgerufen werden, behält der Dienst mithilfe der Funktion den Status für jeden Client bei. Der Client kann das aktuelle Ergebnis abrufen, indem er Result aufruft, und es auf null löschen, indem er Clear aufruft.

Der Dienst verwendet die ASP.NET-Sitzung, um die Ergebnisse für jede Clientsitzung zu speichern. Dadurch wird dem Dienst ermöglicht, das aktuelle Ergebnis für jeden Client über mehrere Aufrufe des Diensts hinweg beizubehalten.

Hinweis

ASP.NET-Sitzungsstatus und WCF-Sitzungen sind unterschiedliche Dinge. Einzelheiten zu WCF-Sitzungen finden Sie unter Sitzung.

Der Dienst verfügt über eine enge Abhängigkeit vom ASP.NET-Sitzungsstatus und erfordert den ASP.NET-Kompatibilitätsmodus, um korrekt zu arbeiten. Diese Anforderungen werden deklarativ durch die Übernahme des AspNetCompatibilityRequirements-Attributs ausgedrückt.

[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;
    }
}

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

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

So können Sie das Beispiel einrichten, erstellen und ausführen

  1. Stellen Sie sicher, dass Sie das einmalige Setupverfahren für die Windows Communication Foundation-Beispiele ausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.

  3. Nachdem die Projektmappe erstellt wurde, führen Sie Setup.bat aus, um die ServiceModelSamples-Anwendung in IIS 7.0 einzurichten. Das Verzeichnis ServiceModelSamples sollte jetzt als IIS 7.0-Anwendung angezeigt werden.

  4. Wenn Sie das Beispiel in einer Einzelcomputer- oder einer computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.

Weitere Informationen