SessionMode Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje dostupné hodnoty, které označují podporu spolehlivých relací, které kontrakt vyžaduje nebo podporuje.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Dědičnost
Pole
Allowed | 0 | Určuje, že kontrakt podporuje relace, pokud je příchozí vazba podporuje. |
NotAllowed | 2 | Určuje, že kontrakt nikdy nepodporuje vazby, které iniciují relace. |
Required | 1 | Určuje, že kontrakt vyžaduje relaci. Pokud není vazba nakonfigurovaná tak, aby podporovala relaci, vyvolá se výjimka. |
Příklady
Následující příklad kódu ukazuje, jak použít SessionMode vlastnost ServiceContractAttribute určující, že IMyService
kontrakt služby vyžaduje vazby, které podporují stav relace.
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
Poznámky
Pomocí výčtu SessionMode ServiceContractAttribute.SessionMode s vlastností vyžadovat, povolit nebo zakázat vazby používat relace mezi koncovými body, které se připojují nebo podporují kontrakt služby. Relace je způsob korelace sady zpráv vyměňovaných mezi dvěma nebo více koncovými body. Další informace o relacích najdete v tématu Použití relací.
Pokud vaše služba podporuje relace, můžete vlastnost použít ServiceBehaviorAttribute.InstanceContextMode k určení vztahu mezi instancemi implementace kontraktu služby a relací kanálu.
Pokud ServiceContractAttribute.SessionMode je například vlastnost nastavená a ServiceBehaviorAttribute.InstanceContextMode vlastnost je nastavena Allowed
na InstanceContextMode.PerSession, klient může použít vazbu, která podporuje spolehlivé relace k provádění opakovaných volání stejného objektu služby.
Vzhledem k tomu, že relace je koncept na úrovni kanálu, který model aplikace používá, existuje interakce mezi výčtem ve smlouvě a ServiceBehaviorAttribute.InstanceContextMode vlastností, která řídí přidružení mezi SessionMode kanály a konkrétními objekty služby.
Následující tabulka ukazuje výsledek příchozího kanálu, který podporuje spolehlivé relace nebo nepodporuje spolehlivé relace s ohledem na kombinaci hodnot ServiceContractAttribute.SessionMode vlastnosti a ServiceBehaviorAttribute.InstanceContextMode vlastnosti služby.
InstanceContextMode – hodnota | Vyžadováno | Povoleno | NotAllowed |
---|---|---|---|
PerCall | – Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext každé volání. – Chování s kanálem bez relace: Vyvolá se výjimka. |
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext každé volání. - Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání. |
– Chování s kanálem relace: Vyvolá se výjimka. - Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání. |
Persession | – Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každý kanál. – Chování s kanálem bez relace: Vyvolá se výjimka. |
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každý kanál. - Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání. |
– Chování s kanálem relace: Vyvolá se výjimka. - Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každé volání. |
Jednoduché | - Chování s kanálem relace: Jedna relace a jedna System.ServiceModel.InstanceContext pro všechna volání. – Chování s kanálem bez relace: Vyvolá se výjimka. |
– Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro každou vytvořenou jednoúčelovou relaci nebo pro uživatelem zadaný singleton. – Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každý vytvořený singleton nebo pro uživatelem zadaný singleton. |
– Chování s kanálem relace: Vyvolá se výjimka. – Chování s kanálem bez relace: Pro System.ServiceModel.InstanceContext každý vytvořený singleton nebo pro uživatelem zadaný singleton. |