ServiceContractAttribute.SessionMode Propriété

Définition

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é

SessionMode

SessionMode qui indique si les sessions sont autorisées, non autorisées ou requises.

Exceptions

La valeur ne fait pas partie des valeurs SessionMode.

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 une façon de faire correspondre 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 contrat de service est implémentée 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 sur 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 Using Sessions and Sessions, Instancing et Concurrency.

Notes

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 des fonctionnalités différentes en plus des contrôles d'instance basés sur une 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 est.

  1. 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 des messages.

  2. 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.

  3. 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 de confiance même lorsque les messages se déplacent sur plusieurs nœuds pendant la conversation. Pour plus d’informations, consultez Sessions fiables.

  4. Il System.ServiceModel.NetMsmqBinding fournit 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.

S’applique à