ServiceContractAttribute.SessionMode Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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.
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.
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.
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".
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.