SessionMode 열거형
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
계약에 필요하거나 계약에서 지원하는 신뢰할 수 있는 세션에 대한 지원을 나타내는 데 사용할 수 있는 값을 지정합니다.
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum 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 생성된 각 싱글톤 또는 사용자가 지정한 싱글톤에 대한 동작입니다. |