Partilhar via


ServiceContractAttribute.SessionMode Propriedade

Definição

Obtém ou define se as sessões são permitidas, não são permitidas ou são necessárias.

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 da propriedade

Um SessionMode que indica se as sessões são permitidas, não são permitidas ou são necessárias.

Exceções

O valor não é um dos valores SessionMode.

Exemplos

O contrato de serviço a seguir exige que as associações configuradas usem sessões ao interagir com SampleDuplexHello implementações de serviço.

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

Comentários

Use a SessionMode propriedade para exigir associações que dão suporte a sessões entre pontos de extremidade. Uma sessão é uma maneira de correlacionar um conjunto de mensagens trocadas entre dois ou mais pontos de extremidade. Se o serviço der suporte a sessões de canal, você poderá usar a InstanceContextMode propriedade para especificar a relação entre instâncias de implementação do contrato de serviço e a sessão do canal. Se uma associação não der suporte a sessões, uma exceção será gerada.

Por exemplo, se a SessionMode propriedade estiver definida SessionMode.Required como e a propriedade estiver definida como PerSession, os InstanceContextMode clientes poderão usar a mesma conexão para fazer chamadas repetidas para o mesmo objeto de serviço.

Para obter mais informações sobre sessões e instâncias de serviço, consulte Usando sessões e sessões, instanciação e simultaneidade.

Observação

Um canal que dá suporte a sessões dá suporte à associação padrão de uma instância de serviço com uma sessão específica. No entanto, diferentes implementações de sessão dão suporte a diferentes recursos, além do controle de instanciação baseado em sessão. O WCF fornece quatro tipos de sessões que você pode usar para fornecer comportamento de aplicativo com sessão; cada tipo de sessão fornece um comportamento adicional específico para o tipo de sessão que é.

  1. O dá suporte a System.ServiceModel.Channels.SecurityBindingElement sessões de segurança, nas quais ambas as extremidades de comunicação concordaram com um processo de criptografia e/ou assinatura digital; todas as mensagens são correlacionadas com essa conversa segura específica. Para obter mais informações, confira Como proteger serviços. Por exemplo, o System.ServiceModel.WSHttpBinding, que contém suporte para sessões de segurança e sessões confiáveis, por padrão usa apenas uma sessão segura que criptografa e assina mensagens digitalmente.

  2. O System.ServiceModel.NetTcpBinding dá suporte às sessões expostas pelas conexões TCP/IP para garantir que todas as mensagens sejam correlacionadas pela sessão de conexão no nível do soquete.

  3. O System.ServiceModel.Channels.ReliableSessionBindingElement, que implementa a especificação WS-ReliableMessaging, fornece suporte para sessões confiáveis nas quais as mensagens são entregues em ordem e exatamente uma vez, permitindo a confiança mesmo quando as mensagens viajam por vários nós durante a conversa. Para obter mais informações, confira Sessões confiáveis.

  4. O System.ServiceModel.NetMsmqBinding fornece sessões de datagrama do MSMQ. Para obter mais informações, consulte Filas no WCF.

Lembre-se de que a configuração da SessionMode propriedade não especifica o tipo de sessão que o contrato requer, apenas que requer um.

Aplica-se a