Udostępnij za pośrednictwem


SessionMode Wyliczenie

Definicja

Określa dostępne wartości, aby wskazać obsługę niezawodnych sesji, których wymaga lub obsługuje kontrakt.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Dziedziczenie
SessionMode

Pola

Allowed 0

Określa, że kontrakt obsługuje sesje, jeśli powiązanie przychodzące je obsługuje.

NotAllowed 2

Określa, że kontrakt nigdy nie obsługuje powiązań, które inicjują sesje.

Required 1

Określa, że kontrakt wymaga powiązania sesji. Jeśli powiązanie nie jest skonfigurowane do obsługi sesji obsługi, jest zgłaszany wyjątek.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać SessionMode właściwości ServiceContractAttribute , aby określić, że IMyService kontrakt usługi wymaga powiązań, które obsługują stan sesji.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name = "SampleDuplexHello",
    Namespace = "http://microsoft.wcf.documentation",
    CallbackContract = typeof(IHelloCallbackContract),
    SessionMode = SessionMode.Required
  )]
  public interface IDuplexHello
  {
    [OperationContract(IsOneWay = true)]
    void Hello(string greeting);
  }

  public interface IHelloCallbackContract
  {
    [OperationContract(IsOneWay = true)]
    void Reply(string responseToGreeting);
  }

  [ServiceBehaviorAttribute(InstanceContextMode=InstanceContextMode.PerSession)]
  public class DuplexHello : IDuplexHello
  {

    public DuplexHello()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~DuplexHello()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    public void Hello(string greeting)
    {
      Console.WriteLine("Caller sent: " + greeting);
      Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
      Console.WriteLine("Waiting two seconds before returning call.");
      // Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000);
      IHelloCallbackContract callerProxy
        = OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
      string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
      Console.WriteLine("Sending back: " + response);
      callerProxy.Reply(response);
    }
  }
}


Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
    <ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf.documentation", _
                     CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)> _
    Public Interface IDuplexHello
        <OperationContract(IsOneWay:=True)> _
        Sub Hello(ByVal greeting As String)
    End Interface

  Public Interface IHelloCallbackContract
    <OperationContract(IsOneWay := True)> _
    Sub Reply(ByVal responseToGreeting As String)
  End Interface

  <ServiceBehaviorAttribute(InstanceContextMode:=InstanceContextMode.PerSession)> _
  Public Class DuplexHello
      Implements IDuplexHello

    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    Public Sub Hello(ByVal greeting As String) Implements IDuplexHello.Hello
      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Session ID: " & OperationContext.Current.SessionId)
      Console.WriteLine("Waiting two seconds before returning call.")
      ' Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000)
      Dim callerProxy As IHelloCallbackContract = OperationContext.Current.GetCallbackChannel(Of IHelloCallbackContract)()
            Dim response = "Service object " & Me.GetHashCode().ToString() & " received: " & greeting
      Console.WriteLine("Sending back: " & response)
      callerProxy.Reply(response)
    End Sub
  End Class
End Namespace

Uwagi

SessionMode Użyj wyliczenia z właściwością ServiceContractAttribute.SessionMode , aby wymagać, zezwalać lub zabraniać powiązań do używania sesji między punktami końcowymi, które łączą się z kontraktem usługi lub obsługują go. Sesja to sposób korelowania zestawu komunikatów wymienianych między co najmniej dwoma punktami końcowymi. Aby uzyskać więcej informacji na temat sesji, zobacz Using Sessions (Korzystanie z sesji).

Jeśli usługa obsługuje sesje, możesz użyć ServiceBehaviorAttribute.InstanceContextMode właściwości , aby określić relację między wystąpieniami implementacji kontraktu usługi a sesją kanału.

Jeśli na przykład ServiceContractAttribute.SessionMode właściwość jest ustawiona na Allowed , a ServiceBehaviorAttribute.InstanceContextMode właściwość jest ustawiona na InstanceContextMode.PerSession, klient może użyć powiązania, które obsługuje niezawodne sesje, aby wykonywać powtarzające się wywołania do tego samego obiektu usługi.

Ponieważ sesja jest pojęciem na poziomie kanału używanym przez model aplikacji, istnieje interakcja między SessionMode wyliczaniem w kontrakcie a ServiceBehaviorAttribute.InstanceContextMode właściwością, która kontroluje skojarzenie między kanałami a określonymi obiektami usługi.

W poniższej tabeli przedstawiono wynik kanału przychodzącego obsługującego niezawodne sesje lub nieobsługiwane niezawodne sesje, biorąc pod uwagę kombinację wartości ServiceContractAttribute.SessionMode właściwości i ServiceBehaviorAttribute.InstanceContextMode właściwości usługi.

InstanceContextMode, wartość Wymagane Dozwolone Notallowed
Percall - Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego wywołania.
— Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego wywołania.
- Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania.
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania.
Persession - Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego kanału.
— Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego kanału.
- Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania.
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania.
Pojedynczy - Zachowanie z kanałem sesji: jedna sesja i jedna System.ServiceModel.InstanceContext dla wszystkich wywołań.
— Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika.
- Zachowanie z kanałem bez sesji: dla System.ServiceModel.InstanceContext każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika.
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek.
- Zachowanie z kanałem bez sesji: dla System.ServiceModel.InstanceContext każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika.

Dotyczy