SessionMode 列挙型

定義

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

public enum class SessionMode
public enum SessionMode
type SessionMode = 
Public Enum SessionMode
継承
SessionMode

フィールド

Allowed 0

受信したバインドがセッションをサポートする場合は、コントラクトがセッションをサポートするように指定します。

NotAllowed 2

コントラクトがセッションを開始するバインドをサポートしないように指定します。

Required 1

コントラクトがセッションフル バインドを必要とすることを指定します。 バインドがセッションをサポートするように構成されていない場合は例外がスローされます。

次のServiceContractAttributeコード例は、サービス コントラクトにセッション状態をSessionModeサポートするバインドが必要であることをIMyService指定するために、the のプロパティを使用する方法を示しています。

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

注釈

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

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

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

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

次の表は、サービスのプロパティとプロパティの値の組み合わせによって、信頼できるセッションをサポートしているか、信頼できるセッションをサポートしていない受信チャネルの結果をServiceContractAttribute.SessionModeServiceBehaviorAttribute.InstanceContextMode示しています。

InstanceContextMode 値 必須 許可 禁止
PerCall - セッションフル チャネルでの動作 : 呼び出しごとに 1 つのセッションと System.ServiceModel.InstanceContext
- セッションレス チャネルでの動作: 例外がスローされます。
- セッションフル チャネルでの動作 : 呼び出しごとに 1 つのセッションと System.ServiceModel.InstanceContext
- セッションレス チャネルでの動作 : 呼び出しごとに 1 つの System.ServiceModel.InstanceContext
- セッションフル チャネルでの動作: 例外がスローされます。
- セッションレス チャネルでの動作 : 呼び出しごとに 1 つの System.ServiceModel.InstanceContext
PerSession - セッションフル チャネルでの動作 : チャネルごとに 1 つのセッションと System.ServiceModel.InstanceContext
- セッションレス チャネルでの動作: 例外がスローされます。
- セッションフル チャネルでの動作 : チャネルごとに 1 つのセッションと System.ServiceModel.InstanceContext
- セッションレス チャネルでの動作 : 呼び出しごとに 1 つの System.ServiceModel.InstanceContext
- セッションフル チャネルでの動作: 例外がスローされます。
- セッションレス チャネルでの動作 : 呼び出しごとに 1 つの System.ServiceModel.InstanceContext
Single - セッションフル チャネルでの動作: すべての呼び出しに対して 1 つのセッションと 1 つ System.ServiceModel.InstanceContext
- セッションレス チャネルでの動作: 例外がスローされます。
- セッションフル チャネルでの動作: セッションと、 System.ServiceModel.InstanceContext 作成されたシングルトンごとに、またはユーザーが指定したシングルトンに対して実行されます。
- セッションレス チャネルでの動作 : 作成したシングルトンまたはユーザー指定のシングルトンごとに System.ServiceModel.InstanceContext
- セッションフル チャネルでの動作: 例外がスローされます。
- セッションレス チャネルでの動作 : 作成したシングルトンまたはユーザー指定のシングルトンごとに System.ServiceModel.InstanceContext

適用対象