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. セッションとは、2 つ以上のエンドポイント間で交換される一連のメッセージを相互に関連付ける方法のことです。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.

たとえば、 SessionModeプロパティが "許可" に設定されてServiceBehaviorAttribute.InstanceContextModeいて、プロパティSystem.ServiceModel.InstanceContextModeがに設定されている場合、クライアントは、信頼できるセッションをサポートするバインディングを使用して、同じサービスオブジェクトに対して繰り返し呼び出しを行うことができます。For example, if the SessionMode property is set to Allowed and the ServiceBehaviorAttribute.InstanceContextMode property is set to System.ServiceModel.InstanceContextMode, 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.

InstanceContextMode 値InstanceContextMode 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 -セッションフルチャネルでの動作:1つ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.
-セッションレスチャネルでの動作:作成されたシングルトンまたはユーザー指定のシングルトンのそれぞれの。System.ServiceModel.InstanceContext- 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.
-セッションレスチャネルでの動作:作成されたシングルトンまたはユーザー指定のシングルトンのそれぞれの。System.ServiceModel.InstanceContext- Behavior with sessionless channel: An System.ServiceModel.InstanceContext for each created singleton or for the user-specified singleton.

適用対象