SessionMode Enumeration
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.
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
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. |