Sesja
W przykładzie Sesja pokazano, jak zaimplementować kontrakt, który wymaga sesji. Sesja zapewnia kontekst wykonywania wielu operacji. Dzięki temu usługa może skojarzyć stan z daną sesją, tak aby kolejne operacje mogły używać stanu poprzedniej operacji. Ten przykład jest oparty na rozpoczynaniu pracy, która implementuje usługę kalkulatora. Kontrakt ICalculator
został zmodyfikowany, aby umożliwić wykonywanie zestawu operacji arytmetycznych przy zachowaniu działającego wyniku. Ta funkcja jest definiowana ICalculatorSession
przez kontrakt. Usługa utrzymuje stan klienta jako wiele operacji usługi są wywoływane w celu wykonania obliczeń. Klient może pobrać bieżący wynik, wywołując Result()
i usuwając wynik do zera, wywołując polecenie Clear()
.
W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana przez usługi Internet Information Services (IIS).
Uwaga
Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.
SessionMode Ustawienie kontraktu w celu Required
zapewnienia, że po ujawnieniu kontraktu za pośrednictwem określonego powiązania powiązanie obsługuje sesje. Jeśli powiązanie nie obsługuje sesji, zgłaszany jest wyjątek. Interfejs ICalculatorSession
jest zdefiniowany tak, że można wywołać co najmniej jedną operację, która modyfikuje wynik uruchomienia, jak pokazano w poniższym przykładowym kodzie.
[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();
}
Usługa używa elementu do InstanceContextModePerSession powiązania danego kontekstu wystąpienia usługi z każdą sesją przychodzącą. Dzięki temu usługa może zachować uruchomiony wynik dla każdej sesji w zmiennej lokalnej składowej.
[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; }
}
Po uruchomieniu przykładu klient wysyła kilka żądań do serwera i żąda wyniku, który następnie jest wyświetlany w oknie konsoli klienta. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.
(((0 + 100) - 50) * 17.65) / 2 = 441.25
Press <ENTER> to terminate client.
Aby skonfigurować, skompilować i uruchomić przykład
Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.
Aby skompilować wersję rozwiązania w języku C# lub Visual Basic .NET, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).
Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.