System.ServiceModel 名前空間


.NET Framework クラス ライブラリ
SessionMode 列挙体

更新 : 2007 年 11 月

コントラクトが要求する、またはサポートする、信頼できるセッションのサポートを示すために使用できる値を指定します。

名前空間 :  System.ServiceModel
アセンブリ :  System.ServiceModel (System.ServiceModel.dll 内)
構文

Visual Basic (宣言)
Public Enumeration SessionMode
Visual Basic (使用法)
Dim instance As SessionMode
C#
public enum SessionMode
Visual C++
public enum class SessionMode
J#
public enum SessionMode
JScript
public enum SessionMode
メンバ

メンバ名説明
Allowed受信したバインディングがセッションをサポートする場合は、コントラクトがセッションをサポートするように指定します。
Requiredコントラクトがセッションフル バインディングを必要とすることを指定します。バインディングがセッションをサポートするように構成されていない場合は例外がスローされます。
NotAllowedコントラクトがセッションを開始するバインディングをサポートしないように指定します。
解説

SessionMode 列挙体と ServiceContractAttribute..::.SessionMode プロパティを使用して、サービス コントラクトに接続する、またはサービス コントラクトをサポートするエンドポイント間でバイディングがセッションをどのように使用するか (セッションの使用を要求する、許可する、または禁止する) を設定します。セッションとは、2 つ以上のエンドポイント間で交換される一連のメッセージを相互に関連付ける方法のことです。セッションの詳細については、「セッションの使用」を参照してください。

サービスがセッションをサポートする場合は、ServiceBehaviorAttribute..::.InstanceContextMode プロパティを使用して、サービス コントラクトの実装とチャネル セッションのインスタンス間の関係を指定できます。

たとえば、SessionMode プロパティを SessionMode..::.Allowed に、ServiceBehaviorAttribute..::.InstanceContextMode プロパティを InstanceContextMode..::.PerSession に設定した場合、クライアントは、信頼できるセッションをサポートするバインディングを使用して、同じサービス オブジェクトを繰り返し呼び出すことができます。

セッションはアプリケーション モデルで使用するチャネル レベルの概念であるので、チャネルと特定サービス オブジェクト間の関連性を制御する ServiceBehaviorAttribute..::.InstanceContextMode プロパティと、コントラクト内の SessionMode 列挙との間には相互に影響があります。

ServiceContractAttribute..::.SessionMode プロパティと ServiceBehaviorAttribute..::.InstanceContextMode プロパティの値のサービスの組み合わせが指定されているという条件で、信頼できるセッションをサポートしている受信チャネルまたはサポートしていない受信チャネルの結果を次の表に示します。

InstanceContextMode 値

Required

Allowed

NotAllowed

PerCall

  • セッションの多いチャネルでの動作: 呼び出しごとに 1 つのセッションと System.ServiceModel..::.InstanceContext

  • セッションの少ないチャネルでの動作: 例外がスローされます。

  • セッションの多いチャネルでの動作: 例外がスローされます。

  • セッションの少ないチャネルでの動作 : 呼び出しごとに System.ServiceModel..::.InstanceContext

PerSession

  • セッションの多いチャネルでの動作: チャネルごとに 1 つのセッションと System.ServiceModel..::.InstanceContext

  • セッションの少ないチャネルでの動作: 例外がスローされます。

  • セッションの多いチャネルでの動作: 例外がスローされます。

  • セッションの少ないチャネルでの動作 : 呼び出しごとに System.ServiceModel..::.InstanceContext

Single

  • セッションの多いチャネルでの動作 : すべての呼び出しに対して 1 つのセッションと 1 つの System.ServiceModel..::.InstanceContext

  • セッションの少ないチャネルでの動作: 例外がスローされます。

  • セッションの多いチャネルでの動作: 作成したシングルトンまたはユーザー指定のシングルトンごとに 1 つのセッションと System.ServiceModel..::.InstanceContext

  • セッションの少ないチャネルでの動作: 作成したシングルトンまたはユーザー指定のシングルトンごとに System.ServiceModel..::.InstanceContext

  • セッションの多いチャネルでの動作: 例外がスローされます。

  • セッションの少ないチャネルでの動作 : 作成したシングルトンまたはユーザー指定のシングルトンごとに System.ServiceModel..::.InstanceContext


ServiceContractAttributeSessionMode を使用して、IMyService サービス コントラクトにセッション状態をサポートするバインディングが必要であることを指定する方法のコード例を次に示します。

C#
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);
    }
  }
}
プラットフォーム

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。
バージョン情報

.NET Framework

サポート対象 : 3.5、3.0
参照

参照

タグ :


Page view tracker