Поделиться через


ServiceContractAttribute.SessionMode Свойство

Определение

Возвращает или задает значение, указывающее, разрешены, запрещены или требуются ли сеансы.

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

Значение свойства

Значение, SessionMode указывающее, разрешены ли сеансы, не разрешены или обязательны.

Исключения

Значение не является одним из значений SessionMode .

Примеры

В следующем контракте службы требуется, чтобы настроенные привязки использовали сеансы при взаимодействии с SampleDuplexHello реализациями служб.

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

Комментарии

SessionMode Используйте свойство, чтобы требовать привязки, поддерживающие сеансы между конечными точками. Сеанс — это способ сопоставления набора сообщений, обменуемых между двумя или несколькими конечными точками. Если служба поддерживает сеансы каналов, можно использовать InstanceContextMode свойство для указания связи между экземплярами реализации контракта службы и сеанса канала. Если привязка не поддерживает сеансы, создается исключение.

Например, если SessionMode для свойства задано значение, а InstanceContextMode для свойства SessionMode.Required задано PerSessionзначение, клиенты могут использовать то же подключение для выполнения повторных вызовов к одному объекту службы.

Дополнительные сведения о сеансах и экземплярах служб см. в разделе Using Session and Session, Instancing и Concurrency.

Замечание

Канал, поддерживающий сеансы, поддерживает сопоставление экземпляра службы по умолчанию с определенным сеансом. Однако различные реализации сеансов поддерживают различные функции в дополнение к элементу управления на основе сеансов. WCF предоставляет четыре типа сеансов, которые можно использовать для обеспечения поведения приложений с сеансами; каждый тип сеанса обеспечивает дополнительное поведение, определенное для типа сеанса.

  1. Поддерживаются System.ServiceModel.Channels.SecurityBindingElement сеансы безопасности, в которых оба конца связи согласованы с процессом шифрования и (или) цифровой подписи; все сообщения коррелируются с этим конкретным безопасным диалогом. Дополнительные сведения см. в разделе "Защита служб". Например, функция System.ServiceModel.WSHttpBinding, содержащая поддержку сеансов безопасности и надежных сеансов, по умолчанию использует только безопасный сеанс, который шифрует и подписывает сообщения цифровыми данными.

  2. Поддерживает System.ServiceModel.NetTcpBinding сеансы, предоставляемые подключениями TCP/IP, чтобы убедиться, что все сообщения коррелируются сеансом подключения на уровне сокета.

  3. Функция System.ServiceModel.Channels.ReliableSessionBindingElement, реализующая спецификацию WS-ReliableMessaging, обеспечивает поддержку надежных сеансов, в которых сообщения доставляются по порядку и точно один раз, обеспечивая уверенность даже при перемещении сообщений по нескольким узлам во время беседы. Дополнительные сведения см. в разделе "Надежные сеансы".

  4. Предоставляет System.ServiceModel.NetMsmqBinding сеансы диаграммы данных MSMQ. Дополнительные сведения см. в разделе "Очереди" в WCF.

Помните, что установка SessionMode свойства не указывает тип сеанса, который требуется контракту, только то, что он требуется.

Применяется к