SessionMode 列挙型
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コントラクトが要求する、またはサポートする、信頼できるセッションのサポートを示すために使用できる値を指定します。
public enum class SessionMode
public enum SessionMode
type SessionMode =
Public Enum 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.SessionModeにSessionMode列挙を使用して、サービス コントラクトに接続またはサポートするエンドポイント間のセッションを使用するようにバインドを要求、許可、または禁止します。 セッションとは、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。 |