SessionMode SessionMode SessionMode SessionMode Enum

Definition

Gibt die verfügbaren Werte zur Unterstützung zuverlässiger Sitzungen an, die ein Vertrag erfordert oder unterstützt. Specifies the values available to indicate the support for reliable sessions that a contract requires or supports.

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

Felder

Allowed Allowed Allowed Allowed 0

Gibt an, dass der Vertrag Sitzungen unterstützt, sofern diese von der eingehenden Bindung unterstützt werden. Specifies that the contract supports sessions if the incoming binding supports them.

NotAllowed NotAllowed NotAllowed NotAllowed 2

Gibt an, dass der Vertrag keine Bindungen unterstützt, die Sitzungen initiieren. Specifies that the contract never supports bindings that initiate sessions.

Required Required Required Required 1

Gibt an, dass der Vertrag eine sitzungsbasierte Bindung erfordert. Specifies that the contract requires a sessionful binding. Wenn die Bindung nicht für die Unterstützung von Sitzungen konfiguriert ist, wird eine Ausnahme ausgelöst. An exception is thrown if the binding is not configured to support session.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mit der SessionMode Eigenschaft der ServiceContractAttribute an, dass die IMyService Dienstvertrag erfordert, Bindungen, die der Sitzungszustand unterstützen.The following code example shows how to use the SessionMode property of the ServiceContractAttribute to specify that the IMyService service contract requires bindings that support session state.

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
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 festzulegen, dass Bindungen Sitzungen zwischen Endpunkten, die eine Verbindung mit dem Dienstvertrag herstellen oder diesen unterstützen, verwenden müssen, verwenden können oder nicht verwenden dürfen.Use the SessionMode enumeration with the ServiceContractAttribute.SessionMode property to require, allow, or prohibit bindings to use sessions between endpoints that connect to or support the service contract. Eine Sitzung ist eine Möglichkeit zur Korrelation von Nachrichten, die zwischen zwei oder mehr Endpunkten ausgetauscht werden.A session is a way of correlating a set of messages exchanged between two or more endpoints. Weitere Informationen zu Sitzungen finden Sie unter mithilfe von Sitzungen.For more information about sessions, see Using Sessions.

Wenn ein Dienst Sitzungen unterstützt, können Sie die ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft verwenden, um die Beziehung zwischen Instanzen der Dienstvertragsimplementierung und der Kanalsitzung anzugeben.If your service supports sessions, you can then use the ServiceBehaviorAttribute.InstanceContextMode property to specify the relationship between instances of your service contract implementation and the channel session.

Z. B. wenn die SessionMode Eigenschaft auf zulässig festgelegt ist und die ServiceBehaviorAttribute.InstanceContextMode -Eigenschaftensatz auf System.ServiceModel.InstanceContextMode, ein Client kann eine Bindung, die zuverlässige Sitzungen, um wiederholte Aufrufe des gleichen Objekts vorzunehmen unterstützt verwenden.For example, if the SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to System.ServiceModel.InstanceContextMode, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.

Da eine Sitzung auf einem Kanalkonzept basiert, das vom Anwendungsmodell verwendet wird, besteht eine Interaktion zwischen der SessionMode-Enumeration in einem Vertrag und der ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft, welche die Zuordnungen zwischen Kanälen und bestimmten Dienstobjekten steuert.Because a session is a channel-level concept that the application model uses, there is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects.

Die folgende Tabelle zeigt das Ergebnis eines eingehenden Kanals, der zuverlässige Sitzungen je nach Kombination der Werte für die ServiceContractAttribute.SessionMode-Eigenschaft und die ServiceBehaviorAttribute.InstanceContextMode-Eigenschaft eines Diensts unterstützt oder nicht unterstützt.The following table shows the result of an incoming channel either supporting reliable sessions or not supporting reliable sessions given a service's combination of the values of the ServiceContractAttribute.SessionMode property and the ServiceBehaviorAttribute.InstanceContextMode property.

InstanceContextMode-WertInstanceContextMode Value ErforderlichRequired AllowedAllowed NotAllowedNotAllowed
PerCallPerCall -Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionless channel: An exception is thrown.
-Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Verhalten bei sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionful channel: An exception is thrown.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession -Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und System.ServiceModel.InstanceContext für jeden Kanal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionless channel: An exception is thrown.
-Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und System.ServiceModel.InstanceContext für jeden Kanal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Verhalten bei sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionful channel: An exception is thrown.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden Aufruf.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle -Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und ein System.ServiceModel.InstanceContext für alle Aufrufe.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionless channel: An exception is thrown.
-Verhalten bei sitzungsbasiertem Kanal: eine Sitzung und System.ServiceModel.InstanceContext für jeden erstellten Singleton oder für den Benutzer angegebenen Singleton.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden erstellten Singleton oder für den Benutzer angegebenen Singleton.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Verhalten bei sitzungsbasiertem Kanal: eine Ausnahme ausgelöst.- Behavior with sessionful channel: An exception is thrown.
-Verhalten bei nicht sitzungsbasiertem Kanal: eine System.ServiceModel.InstanceContext für jeden erstellten Singleton oder für den Benutzer angegebenen Singleton.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

Gilt für: