Freigeben über


ServiceContractAttribute.SessionMode Eigenschaft

Definition

Ruft ab, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind, oder legt dies fest.

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

SessionMode

Ein SessionMode, der angibt, ob Sitzungen zugelassen, nicht zugelassen oder erforderlich sind.

Ausnahmen

Der Wert ist keiner der SessionMode-Werte.

Beispiele

Der folgende Dienstvertrag erfordert, dass konfigurierte Bindungssitzungen beim Interagieren mit SampleDuplexHello Dienstimplementierungen verwenden.

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 Eigenschaft, um Bindungen zu benötigen, die Sitzungen zwischen Endpunkten unterstützen. Eine Sitzung ist eine Möglichkeit zur Korrelation von Nachrichten, die zwischen zwei oder mehr Endpunkten ausgetauscht werden. Wenn Ihr Dienst Kanalsitzungen unterstützt, können Sie dann die Eigenschaft verwenden, um die InstanceContextMode Beziehung zwischen Instanzen ihrer Dienstvertragsimplementierung und der Kanalsitzung anzugeben. Wenn eine Bindung keine Sitzungen unterstützt, wird eine Ausnahme ausgelöst.

Wenn SessionMode die Eigenschaft z. B. auf SessionMode.Required "Festgelegt" festgelegt ist und die InstanceContextMode Eigenschaft auf "" festgelegt PerSessionist, können Clients die gleiche Verbindung verwenden, um wiederholte Aufrufe an dasselbe Dienstobjekt vorzunehmen.

Weitere Informationen zu Sitzungen und Dienstinstanzen finden Sie unter Verwenden von Sitzungen und Sitzungen, Instancing und Concurrency.

Hinweis

Ein Kanal, der Sitzungen unterstützt, unterstützt die Standardzuordnung einer Dienstinstanz zu einer bestimmten Sitzung. Unterschiedliche Sitzungsimplementierungen unterstützen jedoch unterschiedliche Features zusätzlich zur sitzungsbasierten Instanziierungssteuerung. WCF bietet vier Arten von Sitzungen, die Sie verwenden können, um das sitzungsreiche Anwendungsverhalten bereitzustellen; Jeder Sitzungstyp bietet zusätzliches Verhalten, das für den Typ der Sitzung spezifisch ist.

  1. Die System.ServiceModel.Channels.SecurityBindingElement Sicherheitssitzungen werden unterstützt, in denen beide Enden der Kommunikation einen Verschlüsselungs- und/oder digitalen Signaturprozess vereinbart haben. Alle Nachrichten werden mit dieser bestimmten sicheren Unterhaltung korreliert. Weitere Informationen finden Sie unter "Sichern von Diensten". Beispielsweise verwendet die , die System.ServiceModel.WSHttpBindingUnterstützung sowohl für Sicherheitssitzungen als auch zuverlässige Sitzungen enthält, standardmäßig nur eine sichere Sitzung, die Nachrichten verschlüsselt und digital signiert.

  2. Die System.ServiceModel.NetTcpBinding von den TCP/IP-Verbindungen verfügbaren Sitzungen unterstützen, um sicherzustellen, dass alle Nachrichten von der Verbindungssitzung auf Socketebene korreliert werden.

  3. Der System.ServiceModel.Channels.ReliableSessionBindingElement, der die WS-ReliableMessaging-Spezifikation implementiert, bietet Unterstützung für zuverlässige Sitzungen, in denen Nachrichten in Reihenfolge und genau einmal übermittelt werden, und ermöglicht das Vertrauen auch dann, wenn Nachrichten während der Unterhaltung über mehrere Knoten reisen. Weitere Informationen finden Sie unter "Zuverlässige Sitzungen".

  4. Dies System.ServiceModel.NetMsmqBinding stellt MSMQ-Datagramsitzungen bereit. Weitere Informationen finden Sie unter "Warteschlangen" in WCF.

Denken Sie daran, dass das Festlegen der Eigenschaft nicht den Typ der Sitzung angibt, den der SessionMode Vertrag erfordert, nur, dass es eine benötigt.

Gilt für