ServiceContractAttribute.SessionMode Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit si les sessions sont autorisées, ne sont pas autorisées ou sont requises.
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
Valeur de propriété
Indique SessionMode si les sessions sont autorisées, non autorisées ou obligatoires.
Exceptions
La valeur n’est pas l’une des SessionMode valeurs.
Exemples
Le contrat de service suivant nécessite que les liaisons configurées utilisent des sessions lors de l’interaction avec SampleDuplexHello les implémentations de service.
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
Remarques
Utilisez la SessionMode propriété pour exiger des liaisons qui prennent en charge les sessions entre les points de terminaison. Une session est un moyen de mettre en corrélation un ensemble de messages échangés entre deux points de terminaison ou plus. Si votre service prend en charge les sessions de canal, vous pouvez ensuite utiliser la InstanceContextMode propriété pour spécifier la relation entre les instances que votre implémentation de contrat de service et la session de canal. Si une liaison ne prend pas en charge les sessions, une exception est levée.
Par exemple, si la SessionMode propriété est définie SessionMode.Required et que la InstanceContextMode propriété est définie PerSessionsur , les clients peuvent utiliser la même connexion pour effectuer des appels répétés au même objet de service.
Pour plus d’informations sur les sessions et les instances de service, consultez Utilisation de sessions et de sessions, instanciation et accès concurrentiel.
Note
Un canal qui prend en charge les sessions prend en charge l’association par défaut d’une instance de service avec une session particulière. Toutefois, différentes implémentations de session prennent en charge différentes fonctionnalités en plus du contrôle d’instanciation basé sur la session. WCF fournit quatre types de sessions que vous pouvez utiliser pour fournir un comportement d’application avec session ; chaque type de session fournit un comportement supplémentaire spécifique au type de session qu’il contient.
Les System.ServiceModel.Channels.SecurityBindingElement sessions de sécurité, dans lesquelles les deux extrémités de communication ont convenu d’un processus de chiffrement et/ou de signature numérique ; tous les messages sont corrélés avec cette conversation sécurisée spécifique. Pour plus d’informations, consultez Sécurisation des services. Par exemple, le System.ServiceModel.WSHttpBinding, qui contient la prise en charge des sessions de sécurité et des sessions fiables, utilise par défaut uniquement une session sécurisée qui chiffre et signe numériquement les messages.
Prend System.ServiceModel.NetTcpBinding en charge les sessions exposées par les connexions TCP/IP pour s’assurer que tous les messages sont corrélés par la session de connexion au niveau du socket.
Le System.ServiceModel.Channels.ReliableSessionBindingElement, qui implémente la spécification de WS-ReliableMessaging, fournit la prise en charge des sessions fiables dans lesquelles les messages sont remis dans l’ordre et exactement une fois, ce qui permet la confiance même lorsque les messages transitent sur plusieurs nœuds pendant la conversation. Pour plus d’informations, consultez Sessions fiables.
Fournit System.ServiceModel.NetMsmqBinding des sessions de datagramme MSMQ. Pour plus d’informations, consultez Files d’attente dans WCF.
N’oubliez pas que la définition de la SessionMode propriété ne spécifie pas le type de session requis par le contrat, qu’elle en nécessite une seule.