SessionMode SessionMode SessionMode SessionMode Enum

Definición

Especifica los valores disponibles para indicar la compatibilidad para las sesiones confiables que un contrato requiere o admite.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
Herencia

Campos

Allowed Allowed Allowed Allowed 0

Especifica que el contrato admite las sesiones si el enlace entrante las admite.Specifies that the contract supports sessions if the incoming binding supports them.

NotAllowed NotAllowed NotAllowed NotAllowed 2

Especifica que el contrato nunca admite los enlaces que inician las sesiones.Specifies that the contract never supports bindings that initiate sessions.

Required Required Required Required 1

Especifica que el contrato requiere un enlace con sesión.Specifies that the contract requires a sessionful binding. Se produce una excepción si no se configuró el enlace para admitir la sesión.An exception is thrown if the binding is not configured to support session.

Ejemplos

En el ejemplo de código siguiente se muestra cómo utilizar el SessionMode propiedad de la ServiceContractAttribute para especificar que el IMyService contrato de servicio requiere enlaces que admiten el estado de sesión.The 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
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

Comentarios

Utilice la enumeración SessionMode con la propiedad ServiceContractAttribute.SessionMode para exigir, permitir o prohibir que los enlaces utilicen las sesiones entre los puntos de conexión que se conectan al contrato de servicio que lo admiten.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. Una sesión es una manera de poner en correlación un conjunto de mensajes intercambiados entre dos o más puntos de conexión.A session is a way of correlating a set of messages exchanged between two or more endpoints. Para obtener más información acerca de las sesiones, vea mediante sesiones.For more information about sessions, see Using Sessions.

Si el servicio admite las sesiones del canal, puede utilizar a continuación la propiedad ServiceBehaviorAttribute.InstanceContextMode para especificar la relación entre las instancias de la implementación del contrato de servicio y la sesión del 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.

Por ejemplo, si la SessionMode propiedad se establece como permitido y el ServiceBehaviorAttribute.InstanceContextMode propiedad está establecida en System.ServiceModel.InstanceContextMode, un cliente puede utilizar un enlace que admita las sesiones confiables para realizar llamadas repetidas al mismo objeto de servicio.For example, if the SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to System.ServiceModel.InstanceContextMode, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.

Dado que una sesión es un concepto de nivel del canal que utiliza el modelo de la aplicación, hay una interacción entre la enumeración SessionMode en un contrato y la propiedad ServiceBehaviorAttribute.InstanceContextMode, que controla la asociación entre los canales y los objetos de servicio concretos.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.

La tabla siguiente muestra el resultado de un canal entrante ya sea admitiendo sesiones confiables o no haciéndolo dada una combinación de los valores del servicio de las propiedades ServiceContractAttribute.SessionMode y ServiceBehaviorAttribute.InstanceContextMode.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.

Valor InstanceContextModeInstanceContextMode Value ObligatorioRequired PermitidoAllowed NotAllowedNotAllowed
PerCallPerCall -Comportamiento con canal con sesión: Una sesión y System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportamiento con canal sin sesión: Se produce una excepción.- Behavior with sessionless channel: An exception is thrown.
-Comportamiento con canal con sesión: Una sesión y System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamiento con canal con sesión: Se produce una excepción.- Behavior with sessionful channel: An exception is thrown.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession -Comportamiento con canal con sesión: Una sesión y System.ServiceModel.InstanceContext para cada canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportamiento con canal sin sesión: Se produce una excepción.- Behavior with sessionless channel: An exception is thrown.
-Comportamiento con canal con sesión: Una sesión y System.ServiceModel.InstanceContext para cada canal.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
-Comportamiento con canal con sesión: Se produce una excepción.- Behavior with sessionful channel: An exception is thrown.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada llamada.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle -Comportamiento con canal con sesión: Una sesión y un System.ServiceModel.InstanceContext para todas las llamadas.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Comportamiento con canal sin sesión: Se produce una excepción.- Behavior with sessionless channel: An exception is thrown.
-Comportamiento con canal con sesión: Una sesión y System.ServiceModel.InstanceContext para cada singleton creado o para el singleton especificado por el usuario.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada singleton creado o para el singleton especificado por el usuario.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Comportamiento con canal con sesión: Se produce una excepción.- Behavior with sessionful channel: An exception is thrown.
-Comportamiento con canal sin sesión: Un System.ServiceModel.InstanceContext para cada singleton creado o para el singleton especificado por el usuario.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

Se aplica a