ServiceContractAttribute.SessionMode Propiedad

Definición

Obtiene o establece si se permiten sesiones, si no se permiten o si son necesarias.

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.

Excepciones

El valor no es uno de los valores de SessionMode.

Ejemplos

El siguiente contrato de servicio requiere que los enlaces configurados usen sesiones al interactuar con SampleDuplexHello implementaciones de servicio.

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

Use la SessionMode propiedad para requerir enlaces que admitan sesiones entre puntos de conexión. Una sesión es una manera de poner en correlación un conjunto de mensajes intercambiados entre dos o más extremos. Si el servicio admite sesiones de canal, puede usar la InstanceContextMode propiedad para especificar la relación entre instancias de la implementación del contrato de servicio y la sesión del canal. Si un enlace no admite sesiones, se producirá una excepción.

Por ejemplo, si la SessionMode propiedad está establecida SessionMode.Required en y la InstanceContextMode propiedad está establecida PerSessionen , los clientes pueden usar la misma conexión para realizar llamadas repetidas al mismo objeto de servicio.

Para obtener más información sobre las sesiones y las instancias de servicio, consulte Uso de sesiones y sesiones, creación de instancias y simultaneidad.

Nota

Un canal que admite sesiones es compatible con la asociación predeterminada de una instancia de servicio con una sesión determinada. 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. WCF proporciona cuatro tipos de sesiones que puede usar para proporcionar un comportamiento de aplicación con sesión; cada tipo de sesión proporciona un comportamiento adicional específico del tipo de sesión que es.

  1. System.ServiceModel.Channels.SecurityBindingElement Admite sesiones de seguridad, en las que ambos extremos de comunicación han acordado un proceso de cifrado o firma digital; todos los mensajes se correlacionan con esa conversación segura específica. Para más información, consulte Seguridad de servicios. Por ejemplo, System.ServiceModel.WSHttpBinding, que contiene compatibilidad con sesiones de seguridad y sesiones confiables, de forma predeterminada usa solo una sesión segura que cifra y firma digitalmente los mensajes.

  2. System.ServiceModel.NetTcpBinding admite las sesiones expuestas por las conexiones TCP/IP para asegurarse de que todos los mensajes están correlacionados por la sesión de conexión en el nivel de socket.

  3. , System.ServiceModel.Channels.ReliableSessionBindingElementque implementa la especificación de WS-ReliableMessaging, proporciona compatibilidad con sesiones confiables en las que los mensajes se entregan en orden y exactamente una vez, lo que permite la confianza incluso cuando los mensajes viajan a través de varios nodos durante la conversación. Para más información, consulte Sesiones confiables.

  4. System.ServiceModel.NetMsmqBinding proporciona sesiones de datagramas de MSMQ. Para obtener más información, consulte Colas en WCF.

Recuerde que establecer la SessionMode propiedad no especifica el tipo de sesión que requiere el contrato, solo que requiere uno.

Se aplica a