SessionMode Enumeration

Definition

Gibt die verfügbaren Werte zur Unterstützung zuverlässiger Sitzungen an, die ein Vertrag erfordert oder unterstützt.

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

Felder

Allowed 0

Gibt an, dass der Vertrag Sitzungen unterstützt, sofern diese von der eingehenden Bindung unterstützt werden.

NotAllowed 2

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

Required 1

Gibt an, dass der Vertrag eine sitzungsbasierte Bindung erfordert. Wenn die Bindung nicht für die Unterstützung von Sitzungen konfiguriert ist, wird eine Ausnahme ausgelöst.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie Sie die Eigenschaft des ServiceContractAttribute Dienstvertrags verwenden, um anzugeben, dass der SessionMode IMyService Dienstvertrag Bindungen erfordert, die den Sitzungsstatus 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 Aufzählung mit der ServiceContractAttribute.SessionMode Eigenschaft, um Sitzungen zwischen Endpunkten zu benötigen, zu zulassen oder zu verbieten, die eine Verbindung mit oder unterstützung des Dienstvertrags herstellen oder unterstützen. Eine Sitzung ist eine Möglichkeit zur Korrelation von Nachrichten, 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 dann die ServiceBehaviorAttribute.InstanceContextMode Eigenschaft verwenden, um die Beziehung zwischen Instanzen Ihrer Dienstvertragsimplementierung und der Kanalsitzung anzugeben.

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

Da eine Sitzung ein Kanalebene-Konzept ist, das das Anwendungsmodell verwendet, 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, da eine Dienstkombination der Werte der ServiceContractAttribute.SessionMode Eigenschaft und der ServiceBehaviorAttribute.InstanceContextMode Eigenschaft verwendet wird.

InstanceContextMode-Wert Erforderlich Zulässig Nicht zulässig
PerCall - Verhalten mit sitzungsintensivem Kanal: Eine Sitzung und System.ServiceModel.InstanceContext für jeden Anruf.
- Verhalten mit sitzungslosen Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit sitzungsintensivem Kanal: Eine Sitzung und System.ServiceModel.InstanceContext für jeden Anruf.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jeden Anruf.
- Verhalten mit sitzungsintensivem Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jeden Anruf.
PerSession - Verhalten mit sitzungsintensivem Kanal: Eine Sitzung und System.ServiceModel.InstanceContext für jeden Kanal.
- Verhalten mit sitzungslosen Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit sitzungsintensivem Kanal: Eine Sitzung und System.ServiceModel.InstanceContext für jeden Kanal.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jeden Anruf.
- Verhalten mit sitzungsintensivem Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jeden Anruf.
Single - Verhalten mit Sitzungskanal: Eine Sitzung und eine System.ServiceModel.InstanceContext für alle Anrufe.
- Verhalten mit sitzungslosen Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit Sitzungskanal: Eine Sitzung und System.ServiceModel.InstanceContext für jede erstellte Singleton oder für den vom Benutzer angegebenen Singleton.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jede erstellte Singleton oder für den vom Benutzer angegebenen Singleton.
- Verhalten mit sitzungsintensivem Kanal: Eine Ausnahme wird ausgelöst.
- Verhalten mit sitzungslosen Kanal: Eine System.ServiceModel.InstanceContext für jede erstellte Singleton oder für den vom Benutzer angegebenen Singleton.

Gilt für