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 указывает, разрешены, запрещены или требуются ли сеансы.

Исключения

Данное значение не является одним из значений 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 свойству присвоено SessionMode.Required значение, а InstanceContextMode свойству присвоено значение PerSession, клиенты могут использовать то же подключение для выполнения повторных вызовов к одному объекту службы.

Дополнительные сведения о сеансах и экземплярах служб см. в разделе Using Sessions and Sessions, 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 свойства не указывает тип сеанса, необходимого контракту, только то, что для него требуется один.

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