Teilen über


Sitzung

Das Beispiel "Session " veranschaulicht, wie ein Vertrag implementiert wird, der eine Sitzung erfordert. Eine Sitzung bietet Kontext zum Ausführen mehrerer Vorgänge. Dadurch kann ein Dienst einen Zustand einer bestimmten Sitzung zuordnen, sodass nachfolgende Vorgänge den Status eines vorherigen Vorgangs verwenden können. Dieses Beispiel basiert auf dem Erste Schritte, der einen Rechnerdienst implementiert. Der ICalculator Vertrag wurde so geändert, dass eine Reihe von arithmetischen Vorgängen ausgeführt werden kann, während ein laufendes Ergebnis erhalten bleibt. Diese Funktionalität wird durch den ICalculatorSession Vertrag definiert. Der Dienst verwaltet den Status für einen Client, da mehrere Dienstvorgänge aufgerufen werden, um eine Berechnung auszuführen. Der Client kann das aktuelle Ergebnis abrufen, indem er Result() aufruft, und das Ergebnis auf Null setzen, indem er Clear() aufruft.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe) und der Dienst wird von Internetinformationsdienste (IIS) gehostet.

Hinweis

Die Einrichtungsverfahren und Build-Anweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Durch Festlegen von SessionMode des Vertrags auf Required wird sichergestellt, dass – wenn der Vertrag über eine bestimmte Bindung verfügbar gemacht wird – die Bindung Sitzungen unterstützt. Wenn Sitzungen von der Bindung nicht unterstützt werden, wird eine Ausnahme ausgelöst. Die ICalculatorSession Schnittstelle wird so definiert, dass ein oder mehrere Vorgänge aufgerufen werden können, wodurch ein laufendes Ergebnis geändert wird, wie im folgenden Beispielcode gezeigt.

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

Der Dienst verwendet einen InstanceContextMode von PerSession, um an jede eingehende Sitzung einen bestimmten Dienstinstanzkontext zu binden. Dadurch kann der Dienst das laufende Ergebnis für jede Sitzung in einer lokalen Membervariable verwalten.

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class CalculatorService : ICalculatorSession
{
    double result = 0.0D;

    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, sendet der Client mehrere Anforderungen an den Server und fordert das Ergebnis an, das dann im Clientkonsolenfenster angezeigt wird. 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 One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.

  2. Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.