ServiceContractAttribute.SessionMode ServiceContractAttribute.SessionMode ServiceContractAttribute.SessionMode ServiceContractAttribute.SessionMode Property

Definition

Ruft ab, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind, oder legt dies fest.Gets or sets whether sessions are allowed, not allowed or required.

public:
 property System::ServiceModel::SessionMode SessionMode { System::ServiceModel::SessionMode get(); void set(System::ServiceModel::SessionMode value); };
public System.ServiceModel.SessionMode SessionMode { get; set; }
member this.SessionMode : System.ServiceModel.SessionMode with get, set
Public Property SessionMode As SessionMode

Eigenschaftswert

Ein SessionMode, der angibt, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind.A SessionMode that indicates whether sessions are allowed, not allowed, or required.

Ausnahmen

Beispiele

Der folgende Dienstvertrag erfordert, dass die konfigurierten Bindungen Sitzungen verwenden, wenn sie mit SampleDuplexHello-Dienstimplementierungen interagieren.The following service contract requires that configured bindings use sessions when interacting with SampleDuplexHello service implementations.

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-Eigenschaft, um Bindungen anzufordern, die Sitzungen zwischen Endpunkten unterstützen.Use the SessionMode property to require bindings that support sessions between endpoints. 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. Wenn der Dienst Kanalsitzungen unterstützt, können Sie die InstanceContextMode-Eigenschaft verwenden, um die Beziehung zwischen Instanzen der Dienstvertragsimplementierung und der Kanalsitzung anzugeben.If your service supports channel sessions, you can then use the InstanceContextMode property to specify the relationship between instances your service contract implementation and the channel session. Wenn eine Bindung keine Sitzungen unterstützt, wird eine Ausnahme ausgelöst.If a binding does not support sessions, an exception is thrown.

Wenn z. B. die SessionMode-Eigenschaft auf SessionMode.Required und die InstanceContextMode-Eigenschaft auf PerSession festgelegt ist, können Clients die gleiche Verbindung verwenden, um wiederholte Aufrufe des gleichen Objekts vorzunehmen.For example, if the SessionMode property is set to SessionMode.Required and the InstanceContextMode property is set to PerSession, clients can use the same connection to make repeated calls to the same service object.

Weitere Informationen zu Sitzungen und Dienstinstanzen finden Sie unter mithilfe von Sitzungen und Sessions, Instancing und Parallelität.For more information about sessions and service instances, see Using Sessions and Sessions, Instancing, and Concurrency.

Hinweis

Ein Kanal, der Sitzungen unterstützt, unterstützt die Standardzuordnung einer Dienstinstanz zu einer bestimmten Sitzung.A channel that supports sessions supports the default association of a service instance with a particular session. Unterschiedliche Sitzungsimplementierungen unterstützen jedoch unterschiedliche Funktionen zusätzlich zur sitzungsbasierten Instanziierungssteuerung.However, different session implementations support different features in addition to session-based instancing control. WCF bietet vier Typen von Sitzungen, die Sie verwenden können, um sitzungsabhängiges Anwendungsverhalten; Jeder Sitzungstyp bietet zusätzlich in den Typ der Sitzung, die es spezifische Verhalten.WCF provides four types of sessions that you can use to provide sessionful application behavior; each type of session provides additional behavior specific to the type of session it is.

  1. Das System.ServiceModel.Channels.SecurityBindingElement unterstützt Sicherheitssitzungen, bei denen sich beide Kommunikationspartner auf einen Verschlüsselungs- und/oder digitalen Signaturprozess verständigen; alle Nachrichten werden im Rahmen dieser sicheren Konversation in Beziehung zueinander gesetzt.The System.ServiceModel.Channels.SecurityBindingElement supports security sessions, in which both ends of communication have agreed upon an encryption and/or digital signature process; all messages are correlated with that specific secure conversation. Weitere Informationen finden Sie unter Securing Services.For more information, see Securing Services. System.ServiceModel.WSHttpBinding, bei der sowohl Sicherheitssitzungen als auch zuverlässige Sitzungen unterstützt werden, verwendet z.&#160;B. standardmäßig nur eine sichere Sitzung, die Nachrichten digital verschlüsselt und signiert.For example, the System.ServiceModel.WSHttpBinding, which contains support for both security sessions and reliable sessions, by default uses only a secure session which encrypts and digitally signs messages.

  2. System.ServiceModel.NetTcpBinding unterstützt die Sitzungen, die von den TCP/IP-Verbindungen verfügbar gemacht werden, um sicherzustellen, dass alle Nachrichten von der Verbindungssitzung auf Socketebene miteinander in Beziehung gesetzt werden.The System.ServiceModel.NetTcpBinding supports the sessions exposed by the TCP/IP connections to ensure that all messages are correlated by the connection session at the socket level.

  3. System.ServiceModel.Channels.ReliableSessionBindingElement, das die WS-ReliableMessaging-Spezifikation implementiert, bietet Unterstützung für zuverlässige Sitzungen, in denen Nachrichten der Reihenfolge nach und genau nur einmal zugestellt werden, sodass Zuverlässigkeit erzeugt wird, auch wenn sich die Nachrichten während der Konversation durch mehrere Knoten bewegen.The System.ServiceModel.Channels.ReliableSessionBindingElement, which implements the WS-ReliableMessaging specification, provides support for reliable sessions in which messages are delivered in order and exactly once, enabling confidence even when messages travel across multiple nodes during the conversation. Weitere Informationen finden Sie unter zuverlässige Sitzungen.For more information, see Reliable Sessions.

  4. System.ServiceModel.NetMsmqBinding stellt MSMQ-Datagrammsitzungen bereit.The System.ServiceModel.NetMsmqBinding provides MSMQ datagram sessions. Weitere Informationen finden Sie unter Warteschlangen in WCF.For more information, see Queues in WCF.

Bedenken Sie, dass durch Festlegen der SessionMode-Eigenschaft nicht der vom Vertrag angeforderte Typ der Sitzung angegeben wird, sondern nur, dass eine Sitzung erforderlich ist.Remember that setting the SessionMode property does not specify the type of session the contract requires, only that it requires one.

Gilt für: