ServiceContractAttribute.SessionMode Właściwość
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.
Pobiera lub ustawia, czy sesje są dozwolone, niedozwolone lub wymagane.
public:
property System::ServiceModel::SessionMode SessionMode { System::ServiceModel::SessionMode get(); void set(System::ServiceModel::SessionMode value); };
public System.ServiceModel.SessionMode SessionMode { get; set; }
member this.SessionMode : System.ServiceModel.SessionMode with get, set
Public Property SessionMode As SessionMode
Wartość właściwości
Element SessionMode wskazujący, czy sesje są dozwolone, niedozwolone, czy wymagane.
Wyjątki
Wartość nie jest jedną z SessionMode wartości.
Przykłady
Poniższy kontrakt usługi wymaga, aby skonfigurowane powiązania używały sesji podczas interakcji z implementacjami SampleDuplexHello
usług.
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 właściwości , aby wymagać powiązań, które obsługują sesje między punktami końcowymi. Sesja to sposób korelowania zestawu komunikatów wymienianych między co najmniej dwoma punktami końcowymi. Jeśli usługa obsługuje sesje kanału, możesz użyć InstanceContextMode właściwości , aby określić relację między wystąpieniami implementacji kontraktu usługi a sesją kanału. Jeśli powiązanie nie obsługuje sesji, zgłaszany jest wyjątek.
Jeśli na przykład SessionMode właściwość jest ustawiona na SessionMode.Required , a InstanceContextMode właściwość jest ustawiona na PerSession, klienci mogą używać tego samego połączenia, aby wykonywać powtarzające się wywołania do tego samego obiektu usługi.
Aby uzyskać więcej informacji na temat sesji i wystąpień usług, zobacz Using Sessions and Sessions , Instancing and Concurrency (Używanie sesji i sesji, tworzenia wystąpień i współbieżności).
Uwaga
Kanał obsługujący sesje obsługuje domyślne skojarzenie wystąpienia usługi z określoną sesją. Jednak różne implementacje sesji obsługują różne funkcje oprócz kontroli stancingu opartej na sesji. Program WCF udostępnia cztery typy sesji, których można użyć do zapewnienia zachowania aplikacji sesji; każdy typ sesji zapewnia dodatkowe zachowanie specyficzne dla typu sesji.
Program System.ServiceModel.Channels.SecurityBindingElement obsługuje sesje zabezpieczeń, w których oba końce komunikacji uzgodniły proces szyfrowania i/lub podpisu cyfrowego. Wszystkie wiadomości są skorelowane z daną bezpieczną konwersacją. Aby uzyskać więcej informacji, zobacz Zabezpieczanie usług. Na przykład , System.ServiceModel.WSHttpBindingktóry zawiera obsługę zarówno sesji zabezpieczeń, jak i niezawodnych sesji, domyślnie używa tylko bezpiecznej sesji, która szyfruje i podpisuje cyfrowo komunikaty.
Program System.ServiceModel.NetTcpBinding obsługuje sesje uwidocznione przez połączenia TCP/IP, aby upewnić się, że wszystkie komunikaty są skorelowane przez sesję połączenia na poziomie gniazda.
Element System.ServiceModel.Channels.ReliableSessionBindingElement, który implementuje specyfikację WS-ReliableMessaging, zapewnia obsługę niezawodnych sesji, w których komunikaty są dostarczane w kolejności i dokładnie raz, umożliwiając pewność, nawet gdy komunikaty są przesyłane między wieloma węzłami podczas konwersacji. Aby uzyskać więcej informacji, zobacz Sesje niezawodne.
Element System.ServiceModel.NetMsmqBinding udostępnia sesje datagramu MSMQ. Aby uzyskać więcej informacji, zobacz Kolejki w programie WCF.
Należy pamiętać, że ustawienie SessionMode właściwości nie określa typu sesji wymaganej przez kontrakt, tylko że wymaga jednej.