SessionMode Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa dostępne wartości, aby wskazać obsługę niezawodnych sesji, których wymaga lub obsługuje kontrakt.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Dziedziczenie
Pola
Allowed | 0 | Określa, że kontrakt obsługuje sesje, jeśli powiązanie przychodzące je obsługuje. |
NotAllowed | 2 | Określa, że kontrakt nigdy nie obsługuje powiązań, które inicjują sesje. |
Required | 1 | Określa, że kontrakt wymaga powiązania sesji. Jeśli powiązanie nie jest skonfigurowane do obsługi sesji obsługi, jest zgłaszany wyjątek. |
Przykłady
W poniższym przykładzie kodu pokazano, jak używać SessionMode właściwości ServiceContractAttribute , aby określić, że IMyService
kontrakt usługi wymaga powiązań, które obsługują stan sesji.
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
Uwagi
SessionMode Użyj wyliczenia z właściwością ServiceContractAttribute.SessionMode , aby wymagać, zezwalać lub zabraniać powiązań do używania sesji między punktami końcowymi, które łączą się z kontraktem usługi lub obsługują go. Sesja to sposób korelowania zestawu komunikatów wymienianych między co najmniej dwoma punktami końcowymi. Aby uzyskać więcej informacji na temat sesji, zobacz Using Sessions (Korzystanie z sesji).
Jeśli usługa obsługuje sesje, możesz użyć ServiceBehaviorAttribute.InstanceContextMode właściwości , aby określić relację między wystąpieniami implementacji kontraktu usługi a sesją kanału.
Jeśli na przykład ServiceContractAttribute.SessionMode właściwość jest ustawiona na Allowed
, a ServiceBehaviorAttribute.InstanceContextMode właściwość jest ustawiona na InstanceContextMode.PerSession, klient może użyć powiązania, które obsługuje niezawodne sesje, aby wykonywać powtarzające się wywołania do tego samego obiektu usługi.
Ponieważ sesja jest pojęciem na poziomie kanału używanym przez model aplikacji, istnieje interakcja między SessionMode wyliczaniem w kontrakcie a ServiceBehaviorAttribute.InstanceContextMode właściwością, która kontroluje skojarzenie między kanałami a określonymi obiektami usługi.
W poniższej tabeli przedstawiono wynik kanału przychodzącego obsługującego niezawodne sesje lub nieobsługiwane niezawodne sesje, biorąc pod uwagę kombinację wartości ServiceContractAttribute.SessionMode właściwości i ServiceBehaviorAttribute.InstanceContextMode właściwości usługi.
InstanceContextMode, wartość | Wymagane | Dozwolone | Notallowed |
---|---|---|---|
Percall | - Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego wywołania. — Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek. |
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego wywołania. - Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania. |
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek. - Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania. |
Persession | - Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego kanału. — Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek. |
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego kanału. - Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania. |
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek. - Zachowanie z kanałem bez sesji: an System.ServiceModel.InstanceContext dla każdego wywołania. |
Pojedynczy | - Zachowanie z kanałem sesji: jedna sesja i jedna System.ServiceModel.InstanceContext dla wszystkich wywołań. — Zachowanie z kanałem bez sesji: zgłaszany jest wyjątek. |
- Zachowanie z kanałem sesji: sesja i System.ServiceModel.InstanceContext dla każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika. - Zachowanie z kanałem bez sesji: dla System.ServiceModel.InstanceContext każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika. |
- Zachowanie z kanałem sesji: zgłaszany jest wyjątek. - Zachowanie z kanałem bez sesji: dla System.ServiceModel.InstanceContext każdego utworzonego pojedynczego lub pojedynczego określonego przez użytkownika. |