更新 : 2007 年 11 月
コントラクトが要求する、またはサポートする、信頼できるセッションのサポートを示すために使用できる値を指定します。
名前空間 :
System.ServiceModel
アセンブリ :
System.ServiceModel (System.ServiceModel.dll 内)
Public Enumeration SessionMode
Dim instance As SessionMode
public enum class 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 | | | |
PerSession | | | |
Single | | | |
ServiceContractAttribute の SessionMode を使用して、IMyService サービス コントラクトにセッション状態をサポートするバインディングが必要であることを指定する方法のコード例を次に示します。
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
参照