SessionMode SessionMode SessionMode SessionMode Enum

Определение

Задает значения для указания поддержки для надежных сеансов, которые требует или поддерживает контракт.Specifies the values available to indicate the support for reliable sessions that a contract requires or supports.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
Наследование

Поля

Allowed Allowed Allowed Allowed 0

Указывает, что контракт поддерживает сеансы, если входящая привязка их поддерживает.Specifies that the contract supports sessions if the incoming binding supports them.

NotAllowed NotAllowed NotAllowed NotAllowed 2

Указывает, что контракт не поддерживает привязки, инициирующие сеансы.Specifies that the contract never supports bindings that initiate sessions.

Required Required Required Required 1

Указывает, что для контракта требует привязка, связанная с сеансом.Specifies that the contract requires a sessionful binding. Если привязка не настроена для поддержки сеанса, выдается исключение.An exception is thrown if the binding is not configured to support session.

Примеры

В следующем примере кода показано, как использовать свойство SessionMode ServiceContractAttribute, чтобы указать, что контракту службы IMyService требуются привязки, поддерживающие состояние сеанса.The following code example shows how to use the SessionMode property of the ServiceContractAttribute to specify that the IMyService service contract requires bindings that support session state.

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 со свойством ServiceContractAttribute.SessionMode, чтобы требовать, разрешать или запрещать привязки для использования сеансов между конечными точками, которые связывают или поддерживают контракт службы.Use the SessionMode enumeration with the ServiceContractAttribute.SessionMode property to require, allow, or prohibit bindings to use sessions between endpoints that connect to or support the service contract. Сеанс — это способ корреляции набора сообщений, обмен которыми выполняется между двумя или несколькими конечными точками.A session is a way of correlating a set of messages exchanged between two or more endpoints. Дополнительные сведения о сеансах см. в разделе Использование сеансов.For more information about sessions, see Using Sessions.

Если служба поддерживает сеансы, можно использовать свойство ServiceBehaviorAttribute.InstanceContextMode, чтобы указать отношение между экземплярами реализации контракта службы и сеансом канала.If your service supports sessions, you can then use the ServiceBehaviorAttribute.InstanceContextMode property to specify the relationship between instances of your service contract implementation and the channel session.

Например, если свойству ServiceContractAttribute.SessionMode присвоено значение Allowed, а свойству ServiceBehaviorAttribute.InstanceContextModeInstanceContextMode.PerSession, клиент может использовать привязку, поддерживающую надежные сеансы для осуществления повторных вызовов одного и того же объекта службы.For example, if the ServiceContractAttribute.SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to InstanceContextMode.PerSession, a client can use a binding that supports reliable sessions to make repeated calls to the same service object.

Поскольку сеанс представляет собой концепт на уровне канала, используемый моделью приложения, существует взаимодействие между перечислением SessionMode в контракте и свойством ServiceBehaviorAttribute.InstanceContextMode, которое контролирует связь между каналами и определенными объектами службы.Because a session is a channel-level concept that the application model uses, there is an interaction between the SessionMode enumeration in a contract and the ServiceBehaviorAttribute.InstanceContextMode property, which controls the association between channels and specific service objects.

В приведенной ниже таблице показано, к какому результату приводит поддержка или отсутствие поддержки надежных сеансов входящим каналом при заданном сочетании значений свойств ServiceContractAttribute.SessionMode и ServiceBehaviorAttribute.InstanceContextMode в службе.The following table shows the result of an incoming channel either supporting reliable sessions or not supporting reliable sessions given a service's combination of the values of the ServiceContractAttribute.SessionMode property and the ServiceBehaviorAttribute.InstanceContextMode property.

Значение InstanceContextModeInstanceContextMode Value ОбязательноRequired AllowedAllowed NotAllowedNotAllowed
PerCallPerCall — Поведение с каналом сеанса: Сеанс и System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Поведение с каналом без сеанса: Возникает исключение.- Behavior with sessionless channel: An exception is thrown.
— Поведение с каналом сеанса: Сеанс и System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each call.
-Поведение с каналом без сеанса: Значение System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
— Поведение с каналом сеанса: Возникает исключение.- Behavior with sessionful channel: An exception is thrown.
-Поведение с каналом без сеанса: Значение System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
PerSessionPerSession — Поведение с каналом сеанса: Сеанс и System.ServiceModel.InstanceContext для каждого канала.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Поведение с каналом без сеанса: Возникает исключение.- Behavior with sessionless channel: An exception is thrown.
— Поведение с каналом сеанса: Сеанс и System.ServiceModel.InstanceContext для каждого канала.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each channel.
-Поведение с каналом без сеанса: Значение System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
— Поведение с каналом сеанса: Возникает исключение.- Behavior with sessionful channel: An exception is thrown.
-Поведение с каналом без сеанса: Значение System.ServiceModel.InstanceContext для каждого вызова.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each call.
SingleSingle — Поведение с каналом сеанса: Один сеанс и один System.ServiceModel.InstanceContext для всех вызовов.- Behavior with sessionful channel: One session and one System.ServiceModel.InstanceContext for all calls.
-Поведение с каналом без сеанса: Возникает исключение.- Behavior with sessionless channel: An exception is thrown.
— Поведение с каналом сеанса: Сеанс и System.ServiceModel.InstanceContext для каждого созданного одноэлементного элемента или для заданного пользователем единственного элемента.- Behavior with sessionful channel: A session and System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
-Поведение с каналом без сеанса: @No__t-0 для каждого созданного одноэлементного экземпляра или для заданного пользователем одноэлементного множества.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.
— Поведение с каналом сеанса: Возникает исключение.- Behavior with sessionful channel: An exception is thrown.
-Поведение с каналом без сеанса: @No__t-0 для каждого созданного одноэлементного экземпляра или для заданного пользователем одноэлементного множества.- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

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