Dela via


Session

Sessionsexemplet visar hur du implementerar ett kontrakt som kräver en session. En session ger kontext för att utföra flera åtgärder. Detta gör att en tjänst kan associera tillstånd med en viss session, så att efterföljande åtgärder kan använda tillståndet för en tidigare åtgärd. Det här exemplet baseras på Komma igång, som implementerar en kalkylatortjänst. Kontraktet ICalculator har ändrats så att en uppsättning aritmetiska åtgärder kan utföras, samtidigt som ett löpande resultat bevaras. Den här funktionen definieras av ICalculatorSession kontraktet. Tjänsten underhåller tillståndet för en klient eftersom flera tjänståtgärder anropas för att utföra en beräkning. Klienten kan hämta det aktuella resultatet genom att anropa Result() och rensa resultatet till noll genom att anropa Clear().

I det här exemplet är klienten ett konsolprogram (.exe) och tjänsten hanteras av Internet Information Services (IIS).

Kommentar

Installationsproceduren och bygginstruktionerna för det här exemplet finns i slutet av det här avsnittet.

SessionMode Om du ställer in kontraktet för att Required säkerställa att bindningen stöder sessioner när kontraktet exponeras över en viss bindning. Om bindningen inte stöder sessioner utlöses ett undantag. Gränssnittet ICalculatorSession definieras så att en eller flera åtgärder kan anropas, vilket ändrar ett resultat som körs, enligt följande exempelkod.

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

Tjänsten använder en InstanceContextMode av PerSession för att binda en viss tjänstinstanskontext till varje inkommande session. På så sätt kan tjänsten underhålla körningsresultatet för varje session i en lokal medlemsvariabel.

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

När du kör exemplet skickar klienten flera begäranden till servern och begär resultatet, som sedan visas i klientkonsolfönstret. Tryck på RETUR i klientfönstret för att stänga av klienten.

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

Så här konfigurerar du, skapar och kör exemplet

  1. Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.

  2. Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.

  3. Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.