SitzungSession

Das Sitzungsbeispiel führt vor, wie ein Vertrag implementiert wird, der eine Sitzung erfordert.The Session sample demonstrates how to implement a contract that requires a session. Eine Sitzung bietet den Kontext zum Ausführen mehrerer Vorgänge.A session provides context for performing multiple operations. Dadurch wird ermöglicht, dass ein Dienst einer bestimmten Sitzung einen Zustand zuordnen kann, sodass nachfolgende Vorgänge den Zustand eines vorherigen Vorgangs verwenden können.This allows a service to associate state with a given session, such that subsequent operations can use the state of a previous operation. Dieses Beispiel basiert auf der Einstieg, implementiert einen rechnerdienst.This sample is based on the Getting Started, which implements a calculator service. Der ICalculator-Vertrag wurde so geändert, dass eine Reihe von arithmetischen Operationen ausgeführt werden kann, während ein Zwischenergebnis aufbewahrt wird.The ICalculator contract has been modified to allow a set of arithmetic operations to be performed, while keeping a running result. Diese Funktion wird vom ICalculatorSession-Vertrag definiert.This functionality is defined by the ICalculatorSession contract. Während mehrere Dienstvorgänge zum Ausführen einer Berechnung aufgerufen werden, behält der Dienst den Status für einen Client bei.The service maintains the state for a client as multiple service operations are called to perform a calculation. Der Client kann das aktuelle Ergebnis abrufen, indem er Result() aufruft, und es auf Null löschen, indem er Clear() aufruft.The client can retrieve the current result by calling Result() and clear the result to zero by calling Clear().

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

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.Setting the SessionMode of the contract to Required ensures that when the contract is exposed over a particular binding, the binding supports sessions. Wenn Sitzungen von der Bindung nicht unterstützt werden, wird eine Ausnahme ausgelöst.If the binding does not support sessions an exception is thrown. Die ICalculatorSession-Schnittstelle wird so definiert, dass ein oder mehrere Vorgänge aufgerufen werden können, die ein aktuelles Ergebnis ändern (siehe folgender Beispielcode).The ICalculatorSession interface is defined such that one or more operations can be called, which modifies a running result, as shown in the following sample code.

[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.The service uses a InstanceContextMode of PerSession to bind a given service instance context to each incoming session. Dadurch wird dem Dienst ermöglicht, das aktuelle Ergebnis für jede Sitzung in einer lokalen Membervariablen beizubehalten.This allows the service to maintain the running result for each session in a local member variable.

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

Beim Ausführen des Beispiels nimmt der Client mehrere Anforderungen am Server vor und fordert das Ergebnis ab, das dann im Clientkonsolenfenster angezeigt wird.When you run the sample, the client makes several requests to the server and requests the result, which it then displays in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

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

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  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.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Service\Session

Siehe auchSee Also