다음을 통해 공유


SessionMode 열거형

정의

계약에 필요하거나 계약에서 지원하는 신뢰할 수 있는 세션에 대한 지원을 나타내는 데 사용할 수 있는 값을 지정합니다.

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
상속
SessionMode

필드

Allowed 0

들어오는 바인딩에서 세션을 지원하는 경우 계약에서 세션을 지원하도록 지정합니다.

NotAllowed 2

계약에서 세션을 시작하는 바인딩을 지원하지 않도록 지정합니다.

Required 1

계약에서 세션이 있는 바인딩을 필요하도록 지정합니다. 바인딩이 세션을 지원하도록 구성되어 있지 않으면 예외가 throw됩니다.

예제

다음 코드 예제에서는 서비스 계약에 세션 상태를 지원하는 바인딩이 IMyService 필요하도록 지정하기 위해 해당 속성을 ServiceContractAttribute 사용하는 SessionMode 방법을 보여 줍니다.

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 열거형을 사용합니다. 세션은 둘 이상의 엔드포인트 간에 교환되는 메시지 집합의 상관 관계를 지정하는 방법입니다. 세션에 대 한 자세한 내용은 참조 하십시오 를 사용 하 여 세션합니다.

서비스에서 세션을 지원하는 경우 이 속성을 사용하여 ServiceBehaviorAttribute.InstanceContextMode 서비스 계약 구현 인스턴스와 채널 세션 간의 관계를 지정할 수 있습니다.

예를 들어 속성이 ServiceContractAttribute.SessionMode 설정 Allowed 되고 ServiceBehaviorAttribute.InstanceContextMode 속성이 설정된 InstanceContextMode.PerSession경우 클라이언트는 신뢰할 수 있는 세션을 지원하는 바인딩을 사용하여 동일한 서비스 개체를 반복적으로 호출할 수 있습니다.

세션은 애플리케이션 모델에서 사용하는 채널 수준 개념이므로 채널과 특정 서비스 개체 간의 연결을 제어하는 SessionMode 속성과 계약의 ServiceBehaviorAttribute.InstanceContextMode 열거형 사이의 상호 작용이 있습니다.

다음 표에서는 들어오는 채널이 신뢰할 수 있는 세션을 지원하거나 서비스의 속성 값과 ServiceBehaviorAttribute.InstanceContextMode 속성의 ServiceContractAttribute.SessionMode 조합에 따라 신뢰할 수 있는 세션을 지원하지 않는 결과를 보여 줍니다.

InstanceContextMode 값 필수 허용 NotAllowed
PerCall - 세션 채널의 동작: 세션 및 System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
- 세션 없는 채널의 동작: 예외가 throw됩니다.
- 세션 채널의 동작: 세션 및 System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
- 세션 채널이 있는 동작: 예외가 throw됩니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
PerSession - 세션 채널의 동작: 세션 및 System.ServiceModel.InstanceContext 각 채널에 대한 동작입니다.
- 세션 없는 채널의 동작: 예외가 throw됩니다.
- 세션 채널의 동작: 세션 및 System.ServiceModel.InstanceContext 각 채널에 대한 동작입니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
- 세션 채널이 있는 동작: 예외가 throw됩니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 각 호출에 대한 동작입니다.
Single - 세션 채널이 있는 동작: 세션 하나와 모든 호출에 대해 하나씩 System.ServiceModel.InstanceContext .
- 세션 없는 채널의 동작: 예외가 throw됩니다.
- 세션 채널의 동작: 세션 및 System.ServiceModel.InstanceContext 생성된 각 싱글톤 또는 사용자 지정 싱글톤에 대한 동작입니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 생성된 각 싱글톤 또는 사용자가 지정한 싱글톤에 대한 동작입니다.
- 세션 채널이 있는 동작: 예외가 throw됩니다.
- 세션 없는 채널의 동작: System.ServiceModel.InstanceContext 생성된 각 싱글톤 또는 사용자가 지정한 싱글톤에 대한 동작입니다.

적용 대상