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 označující 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
| Name | Hodnota | Description |
|---|---|---|
| Allowed | 0 | Určuje, že kontrakt podporuje relace, pokud je příchozí vazba podporuje. |
| Required | 1 | Určuje, že kontrakt vyžaduje relaciovou vazbu. Pokud není vazba nakonfigurovaná tak, aby podporovala relaci, vyvolá se výjimka. |
| NotAllowed | 2 | Určuje, že kontrakt nikdy nepodporuje vazby, které iniciují relace. |
Příklady
Následující příklad kódu ukazuje, jak použít SessionMode vlastnost ServiceContractAttribute k určení, ž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 SessionModeServiceContractAttribute.SessionMode s vlastností můžete vyžadovat, povolit nebo zakázat vazby pro použití relací 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 naleznete v části Použití relací.
Pokud vaše služba podporuje relace, můžete pomocí ServiceBehaviorAttribute.InstanceContextMode vlastnosti určit vztah mezi instancemi implementace kontraktu služby a relací kanálu.
Pokud je například ServiceContractAttribute.SessionMode vlastnost nastavena 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 | Povinné | Povoleno | Není povoleno |
|---|---|---|---|
| PerCall | - Chování s kanálem relace: Relace a System.ServiceModel.InstanceContext pro 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 pro každé volání. - Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání. |
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka. - Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání. |
| Persession | - Chování s kanálem s relací: 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 s relací: Relace a System.ServiceModel.InstanceContext pro každý kanál. - Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání. |
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka. - Chování s kanálem bez relace: System.ServiceModel.InstanceContext pro každé volání. |
| Single | - 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ždý vytvořený singleton nebo pro uživatelem zadaný singleton. - Chování s kanálem bez relace: Pro každý vytvořený System.ServiceModel.InstanceContext singleton nebo pro uživatelem zadaný singleton. |
– Chování s kanálem, který udržuje stav relace: Vyvolá se výjimka. - Chování s kanálem bez relace: Pro každý vytvořený System.ServiceModel.InstanceContext singleton nebo pro uživatelem zadaný singleton. |