Freigeben über


SessionMode Enumeration

Definition

Gibt die verfügbaren Werte an, um die Unterstützung für zuverlässige Sitzungen anzugeben, die ein Vertrag erfordert oder unterstützt.

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

Felder

Name Wert Beschreibung
Allowed 0

Gibt an, dass der Vertrag Sitzungen unterstützt, wenn die eingehende Bindung sie unterstützt.

Required 1

Gibt an, dass für den Vertrag eine sitzungsreiche Bindung erforderlich ist. Eine Ausnahme wird ausgelöst, wenn die Bindung nicht für die Unterstützung der Sitzung konfiguriert ist.

NotAllowed 2

Gibt an, dass der Vertrag nie Bindungen unterstützt, die Sitzungen initiieren.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die SessionMode Eigenschaft des ServiceContractAttribute Dienstvertrags verwendet wird, um anzugeben, dass IMyService Bindungen erforderlich sind, die den Sitzungszustand unterstützen.

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

Hinweise

Verwenden Sie die SessionMode Enumeration mit der ServiceContractAttribute.SessionMode Eigenschaft, um Bindungen für die Verwendung von Sitzungen zwischen Endpunkten zu verlangen, zuzulassen oder zu verbieten, die eine Verbindung mit dem Dienstvertrag herstellen oder unterstützen. Eine Sitzung ist eine Möglichkeit, eine Reihe von Nachrichten zu korrelieren, die zwischen zwei oder mehr Endpunkten ausgetauscht werden. Weitere Informationen zu Sitzungen finden Sie unter Verwenden von Sitzungen.

Wenn Ihr Dienst Sitzungen unterstützt, können Sie die Eigenschaft verwenden ServiceBehaviorAttribute.InstanceContextMode , um die Beziehung zwischen Instanzen Ihrer Dienstvertragsimplementierung und der Kanalsitzung anzugeben.

Wenn die ServiceContractAttribute.SessionMode Eigenschaft z. B. auf Allowed die Eigenschaft festgelegt ist und auf ServiceBehaviorAttribute.InstanceContextMode diese festgelegt InstanceContextMode.PerSessionist, kann ein Client eine Bindung verwenden, die zuverlässige Sitzungen unterstützt, um wiederholte Aufrufe an dasselbe Dienstobjekt auszuführen.

Da es sich bei einer Sitzung um ein Vom Anwendungsmodell verwendetes Konzept auf Kanalebene handelt, gibt es eine Interaktion zwischen der SessionMode Enumeration in einem Vertrag und der ServiceBehaviorAttribute.InstanceContextMode Eigenschaft, die die Zuordnung zwischen Kanälen und bestimmten Dienstobjekten steuert.

Die folgende Tabelle zeigt das Ergebnis eines eingehenden Kanals, der zuverlässige Sitzungen unterstützt oder keine zuverlässigen Sitzungen unterstützt, wenn ein Dienst die Werte der ServiceContractAttribute.SessionMode Eigenschaft und der ServiceBehaviorAttribute.InstanceContextMode Eigenschaft kombiniert.

InstanceContextMode-Wert Erforderlich Zulässig Nicht erlaubt
PerCall – Verhalten bei sitzungsbasiertem Kanal: Eine Sitzung und ein System.ServiceModel.InstanceContext pro Aufruf.
– Verhalten bei nicht sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
– Verhalten bei sitzungsbasiertem Kanal: Eine Sitzung und ein System.ServiceModel.InstanceContext pro Aufruf.
– Verhalten bei nicht sitzungsbasiertem Kanal: Ein System.ServiceModel.InstanceContext pro Aufruf.
– Verhalten bei sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
– Verhalten bei nicht sitzungsbasiertem Kanal: Ein System.ServiceModel.InstanceContext pro Aufruf.
PerSession – Verhalten bei sitzungsbasiertem Kanal: Eine Sitzung und ein System.ServiceModel.InstanceContext pro Kanal.
– Verhalten bei nicht sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
– Verhalten bei sitzungsbasiertem Kanal: Eine Sitzung und ein System.ServiceModel.InstanceContext pro Kanal.
– Verhalten bei nicht sitzungsbasiertem Kanal: Ein System.ServiceModel.InstanceContext pro Aufruf.
– Verhalten bei sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
– Verhalten bei nicht sitzungsbasiertem Kanal: Ein System.ServiceModel.InstanceContext pro Aufruf.
Ledig – Verhalten mit sitzungsbehafteten Kanal: Eine Sitzung und eine System.ServiceModel.InstanceContext für alle Anrufe.
– Verhalten bei nicht sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
– Verhalten mit sitzungsbehaftetem Kanal: Eine Sitzung und System.ServiceModel.InstanceContext für jedes erstellte Singleton oder für das vom Benutzer angegebene Singleton.
- Verhalten mit Kanal ohne Sitzung: Ein System.ServiceModel.InstanceContext für jedes erstellte Singleton oder für das vom Benutzer angegebene Singleton.
– Verhalten bei sitzungsbasiertem Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit Kanal ohne Sitzung: Ein System.ServiceModel.InstanceContext für jedes erstellte Singleton oder für das vom Benutzer angegebene Singleton.

Gilt für: