SessionMode SessionMode SessionMode SessionMode Enum

Définition

Spécifie les valeurs disponibles pour indiquer la prise en charge des sessions fiables qu'un contrat requiert ou prend en charge.Specifies the values available to indicate the support for reliable sessions that a contract requires or supports.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Héritage

Champs

Allowed Allowed Allowed Allowed 0

Spécifie que le contrat prend en charge les sessions si la liaison entrante les prend en charge.Specifies that the contract supports sessions if the incoming binding supports them.

NotAllowed NotAllowed NotAllowed NotAllowed 2

Spécifie que le contrat ne prend jamais en charge des liaisons qui initient des sessions.Specifies that the contract never supports bindings that initiate sessions.

Required Required Required Required 1

Spécifie que le contrat requiert une liaison de session.Specifies that the contract requires a sessionful binding. Une exception est levée si la liaison n'est pas configurée pour prendre en charge la session.An exception is thrown if the binding is not configured to support session.

Exemples

L’exemple SessionMode IMyService de code suivant montre comment utiliser la propriété du pourspécifierquelecontratdeservicerequiertdesliaisonsquiprennentenchargel’étatdesession.ServiceContractAttributeThe following code example shows how to use the SessionMode property of the ServiceContractAttribute to specify that the IMyService service contract requires bindings that support session state.

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 l’énumération SessionMode avec la propriété ServiceContractAttribute.SessionMode pour requérir, autoriser ou interdire l’utilisation des sessions par les liaisons entre les points de terminaison qui se connectent à ou prennent en charge le contrat de service.Use the SessionMode enumeration with the ServiceContractAttribute.SessionMode property to require, allow, or prohibit bindings to use sessions between endpoints that connect to or support the service contract. Une session est une façon de faire correspondre un ensemble de messages échangés entre deux points de terminaison ou plus.A session is a way of correlating a set of messages exchanged between two or more endpoints. Pour plus d’informations sur les sessions, consultez utilisation de sessions.For more information about sessions, see Using Sessions.

Si votre service prend en charge les sessions, vous pouvez donc utiliser la propriété ServiceBehaviorAttribute.InstanceContextMode pour spécifier la relation entre les instances de votre implémentation de contrat de service et la session de canal.If your service supports sessions, you can then use the ServiceBehaviorAttribute.InstanceContextMode property to specify the relationship between instances of your service contract implementation and the channel session.

Par exemple, si la propriété ServiceContractAttribute.SessionMode a la valeur Allowed et la propriété ServiceBehaviorAttribute.InstanceContextMode a la valeur InstanceContextMode.PerSession, un client peut utiliser une liaison qui prend en charge les sessions fiables pour effectuer des appels répétés au même objet de service.For example, if the ServiceContractAttribute.SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to InstanceContextMode.PerSession, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.

Étant donné qu'une session est un concept au niveau du canal que le modèle d'application utilise, il y a une interaction entre l'énumération SessionMode dans un contrat et la propriété ServiceBehaviorAttribute.InstanceContextMode, qui contrôle l'association entre les canaux et les objets de service spécifiques.Because a session is a channel-level concept that the application model uses, there is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects.

Le tableau suivant présente le résultat d'un canal entrant prenant ou non en charge les sessions fiables en fonction de la combinaison des valeurs de la propriété ServiceContractAttribute.SessionMode et de la propriété ServiceBehaviorAttribute.InstanceContextMode d'un service.The following table shows the result of an incoming channel either supporting reliable sessions or not supporting reliable sessions given a service's combination of the values of the ServiceContractAttribute.SessionMode property and the ServiceBehaviorAttribute.InstanceContextMode property.

Valeur InstanceContextModeInstanceContextMode Value ObligatoireRequired AllowedAllowed NotAllowedNotAllowed
PerCallPerCall -Comportement avec un canal de session: Une session et System.ServiceModel.InstanceContext pour chaque appel.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportement avec canal sans session: Une exception est levée.- Behavior with sessionless channel: An exception is thrown.
-Comportement avec un canal de session: Une session et System.ServiceModel.InstanceContext pour chaque appel.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque appel.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportement avec un canal de session: Une exception est levée.- Behavior with sessionful channel: An exception is thrown.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque appel.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession -Comportement avec un canal de session: Une session et System.ServiceModel.InstanceContext pour chaque canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportement avec canal sans session: Une exception est levée.- Behavior with sessionless channel: An exception is thrown.
-Comportement avec un canal de session: Une session et System.ServiceModel.InstanceContext pour chaque canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque appel.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportement avec un canal de session: Une exception est levée.- Behavior with sessionful channel: An exception is thrown.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque appel.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle -Comportement avec un canal de session: Une session et une System.ServiceModel.InstanceContext pour tous les appels.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Comportement avec canal sans session: Une exception est levée.- Behavior with sessionless channel: An exception is thrown.
-Comportement avec un canal de session: Une session et System.ServiceModel.InstanceContext pour chaque Singleton créé ou pour le singleton spécifié par l’utilisateur.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque Singleton créé ou pour le singleton spécifié par l’utilisateur.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportement avec un canal de session: Une exception est levée.- Behavior with sessionful channel: An exception is thrown.
-Comportement avec canal sans session: System.ServiceModel.InstanceContext Pour chaque Singleton créé ou pour le singleton spécifié par l’utilisateur.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

S’applique à