ServiceContractAttribute.SessionMode Propiedad

Definición

Obtiene o establece si se permiten sesiones, si no se permiten o si son necesarias.Gets or sets whether sessions are allowed, not allowed or required.

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

Valor de propiedad

SessionMode, que indica si se permiten sesiones, no se permiten o si son necesarias.A SessionMode that indicates whether sessions are allowed, not allowed, or required.

Excepciones

El valor no es uno de los valores de SessionMode.The value is not one of the SessionMode values.

Ejemplos

El contrato del servicio siguiente requiere que los enlaces configurados usen sesiones al interactuar con las implementaciones de servicio SampleDuplexHello.The following service contract requires that configured bindings use sessions when interacting with SampleDuplexHello service implementations.

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

Comentarios

Utilice la propiedad SessionMode para requerir enlaces que admiten sesiones entre los puntos de conexión.Use the SessionMode property to require bindings that support sessions between endpoints. Una sesión es una manera de poner en correlación un conjunto de mensajes intercambiados entre dos o más extremos.A session is a way of correlating a set of messages exchanged between two or more endpoints. Si el servicio admite las sesiones del canal, puede utilizar a continuación la propiedad InstanceContextMode para especificar la relación entre las instancias de implementación de contrato de servicio y la sesión del canal.If your service supports channel sessions, you can then use the InstanceContextMode property to specify the relationship between instances your service contract implementation and the channel session. Si un enlace no admite sesiones, se producirá una excepción.If a binding does not support sessions, an exception is thrown.

Por ejemplo, si la propiedad SessionMode está establecida en SessionMode.Required y la propiedad InstanceContextMode en PerSession, los clientes pueden utilizar la misma conexión para realizar llamadas repetidas al mismo objeto de servicio.For example, if the SessionMode property is set to SessionMode.Required and the InstanceContextMode property is set to PerSession, clients can use the same connection to make repeated calls to the same service object.

Para obtener más información acerca de las sesiones y las instancias de servicio, vea usar sesiones y sesiones, creación de instancias y simultaneidad.For more information about sessions and service instances, see Using Sessions and Sessions, Instancing, and Concurrency.

Nota

Un canal que admite sesiones es compatible con la asociación predeterminada de una instancia de servicio con una sesión determinada.A channel that supports sessions supports the default association of a service instance with a particular session. Sin embargo, las implementaciones de sesión diferentes admiten características distintas además del control de creación de instancias basado en la sesión.However, different session implementations support different features in addition to session-based instancing control. WCF proporciona cuatro tipos de sesiones que puede usar para proporcionar el comportamiento de la aplicación con sesión. cada tipo de sesión proporciona un comportamiento adicional específico del tipo de sesión en el que se encuentra.WCF provides four types of sessions that you can use to provide sessionful application behavior; each type of session provides additional behavior specific to the type of session it is.

  1. System.ServiceModel.Channels.SecurityBindingElement admite sesiones de seguridad, en las que ambos fines de comunicación han estado de acuerdo en un cifrado y/o proceso de firma digital; todos los mensajes se ponen en correlación con esa conversación segura concreta.The System.ServiceModel.Channels.SecurityBindingElement supports security sessions, in which both ends of communication have agreed upon an encryption and/or digital signature process; all messages are correlated with that specific secure conversation. Para obtener más información, vea proteger los servicios.For more information, see Securing Services. Por ejemplo, System.ServiceModel.WSHttpBinding, que es compatible con las sesiones de seguridad y confiables, utiliza de forma predeterminada sólo una sesión segura que cifra y firma digitalmente los mensajes.For example, the System.ServiceModel.WSHttpBinding, which contains support for both security sessions and reliable sessions, by default uses only a secure session which encrypts and digitally signs messages.

  2. System.ServiceModel.NetTcpBinding admite las sesiones expuestas por las conexiones de TCP/IP para asegurarse de que todos los mensajes están correlacionados por la sesión de conexión en el nivel de socket.The System.ServiceModel.NetTcpBinding supports the sessions exposed by the TCP/IP connections to ensure that all messages are correlated by the connection session at the socket level.

  3. System.ServiceModel.Channels.ReliableSessionBindingElement, que implementa la especificación de WS-ReliableMessaging, proporciona la compatibilidad para las sesiones confiables en las que los mensajes se entregan en orden y sólo una vez, posibilitando el establecimiento de relaciones de confianza aun cuando los mensajes viajan por varios nodos durante la conversación.The System.ServiceModel.Channels.ReliableSessionBindingElement, which implements the WS-ReliableMessaging specification, provides support for reliable sessions in which messages are delivered in order and exactly once, enabling confidence even when messages travel across multiple nodes during the conversation. Para obtener más información, vea sesiones confiables.For more information, see Reliable Sessions.

  4. System.ServiceModel.NetMsmqBinding proporciona las sesiones de datagrama de MSMQ.The System.ServiceModel.NetMsmqBinding provides MSMQ datagram sessions. Para obtener más información, vea colas en WCF.For more information, see Queues in WCF.

Recuerde que establecer la propiedad SessionMode no especifica el tipo de sesión que el contrato requiere, sólo que requiere uno.Remember that setting the SessionMode property does not specify the type of session the contract requires, only that it requires one.

Se aplica a