SessionMode Enumeráció
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Megadja azokat az értékeket, amelyek jelzik a szerződés által igényelt vagy támogatott megbízható munkamenetek támogatását.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum SessionMode
- Öröklődés
Mezők
| Name | Érték | Description |
|---|---|---|
| Allowed | 0 | Megadja, hogy a szerződés támogatja-e a munkameneteket, ha a bejövő kötés támogatja őket. |
| Required | 1 | Megadja, hogy a szerződéshez munkamenet-kötés szükséges. Kivétel akkor történik, ha a kötés nincs konfigurálva a munkamenet támogatásához. |
| NotAllowed | 2 | Meghatározza, hogy a szerződés soha nem támogatja a munkameneteket kezdeményező kötéseket. |
Példák
Az alábbi példakód bemutatja, hogyan használható a SessionMode szolgáltatásszerződés tulajdonsága ServiceContractAttribute annak meghatározására, hogy a IMyService szolgáltatásszerződéshez munkamenet-állapotot támogató kötések szükségesek.
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
Megjegyzések
SessionMode A tulajdonság enumerálásával ServiceContractAttribute.SessionMode megkövetelheti, engedélyezheti vagy tilthatja a kötéseket a szolgáltatásszerződéshez csatlakozó vagy támogató végpontok közötti munkamenetek használatához. A munkamenetek a két vagy több végpont között kicserélt üzenetek egy csoportjának korrelációját jelzik. A munkamenetekről további információt a Munkamenetek használata című témakörben talál.
Ha a szolgáltatás támogatja a munkameneteket, a ServiceBehaviorAttribute.InstanceContextMode tulajdonság használatával megadhatja a szolgáltatási szerződés implementálásának példányai és a csatorna munkamenete közötti kapcsolatot.
Ha például a ServiceContractAttribute.SessionMode tulajdonság értéke Allowed és a ServiceBehaviorAttribute.InstanceContextMode tulajdonság értéke van beállítva InstanceContextMode.PerSession, az ügyfél használhat egy olyan kötést, amely támogatja a megbízható munkameneteket, hogy ismétlődő hívásokat kezdeményezhessenek ugyanahhoz a szolgáltatásobjektumhoz.
Mivel a munkamenet az alkalmazásmodell által használt csatornaszintű fogalom, a szerződés enumerálása és a SessionMode tulajdonság közötti ServiceBehaviorAttribute.InstanceContextMode interakció szabályozza a csatornák és adott szolgáltatásobjektumok közötti társítást.
Az alábbi táblázat egy megbízható munkameneteket támogató bejövő csatorna eredményét mutatja be, vagy nem támogatja a megbízható munkameneteket, mivel a szolgáltatás a tulajdonság és a ServiceContractAttribute.SessionMode tulajdonság értékeinek ServiceBehaviorAttribute.InstanceContextMode kombinációját adja.
| InstanceContextMode érték | Szükséges | Engedélyezett | Nem engedélyezett |
|---|---|---|---|
| PerCall | - Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden híváshoz. - Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez. |
- Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden híváshoz. - Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz. |
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez. - Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz. |
| PerSession | - Viselkedés munkamenettel rendelkező csatornával: Egy munkamenet és System.ServiceModel.InstanceContext az összes csatornához. - Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez. |
- Viselkedés munkamenettel rendelkező csatornával: Egy munkamenet és System.ServiceModel.InstanceContext az összes csatornához. - Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz. |
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez. - Viselkedés munkamenet nélküli csatornával: Egy System.ServiceModel.InstanceContext tartozik minden híváshoz. |
| Single | - Viselkedés munkamenet-csatornával: Egy munkamenet és egy System.ServiceModel.InstanceContext az összes híváshoz. - Viselkedés munkamenet nélküli csatornával: A rendszer kivételt jelez. |
- Viselkedés munkamenet-csatornával: Egy munkamenet és System.ServiceModel.InstanceContext minden egyes létrehozott egyton vagy a felhasználó által megadott singleton esetében. - Viselkedés munkamenet nélküli csatornával: Minden System.ServiceModel.InstanceContext egyes létrehozott szinguleton vagy a felhasználó által megadott szinguletonra vonatkozó viselkedés. |
- Viselkedés munkamenet-csatornával: A rendszer kivételt jelez. - Viselkedés munkamenet nélküli csatornával: Minden System.ServiceModel.InstanceContext egyes létrehozott szinguleton vagy a felhasználó által megadott szinguletonra vonatkozó viselkedés. |