OperationBehaviorAttribute.ReleaseInstanceMode プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
操作呼び出しのどの時点でサービス オブジェクトをリサイクルするかを示す値を取得または設定します。
public:
property System::ServiceModel::ReleaseInstanceMode ReleaseInstanceMode { System::ServiceModel::ReleaseInstanceMode get(); void set(System::ServiceModel::ReleaseInstanceMode value); };
public System.ServiceModel.ReleaseInstanceMode ReleaseInstanceMode { get; set; }
member this.ReleaseInstanceMode : System.ServiceModel.ReleaseInstanceMode with get, set
Public Property ReleaseInstanceMode As ReleaseInstanceMode
プロパティ値
ReleaseInstanceMode 値のいずれか 1 つ。 既定値は、None です。
例外
値が、ReleaseInstanceMode 値ではありません。
例
ReleaseInstanceMode を使用して呼び出しの前後にサービス オブジェクトをリサイクルするコード例を次に示します。
class SampleService : ISampleService
{
private Guid id;
private string session;
public SampleService()
{
id = Guid.NewGuid();
session = OperationContext.Current.SessionId;
Console.WriteLine("Object {0} has been created.", id);
Console.WriteLine("For session {0}", session);
}
[OperationBehavior(
ReleaseInstanceMode=ReleaseInstanceMode.BeforeAndAfterCall
)]
public string SampleMethod(string msg)
{
Console.WriteLine("The caller said: \"{0}\"", msg);
Console.WriteLine("For session {0}", OperationContext.Current.SessionId);
return "The service greets you: " + msg;
}
~SampleService()
{
Console.WriteLine("Object {0} has been destroyed.", id);
Console.WriteLine("For session {0}", session);
}
}
Friend Class SampleService
Implements ISampleService
Private id As Guid
Private session As String
Public Sub New()
id = Guid.NewGuid()
session = OperationContext.Current.SessionId
Console.WriteLine("Object {0} has been created.", id)
Console.WriteLine("For session {0}", session)
End Sub
<OperationBehavior(ReleaseInstanceMode:=ReleaseInstanceMode.BeforeAndAfterCall)> _
Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
Console.WriteLine("The caller said: ""{0}""", msg)
Console.WriteLine("For session {0}", OperationContext.Current.SessionId)
Return "The service greets you: " & msg
End Function
Protected Overrides Sub Finalize()
Console.WriteLine("Object {0} has been destroyed.", id)
Console.WriteLine("For session {0}", session)
End Sub
End Class
注釈
このプロパティをReleaseInstanceMode使用して、Communication Foundation (WCF) Windowsメソッドの実行中にサービス オブジェクトをリサイクルするタイミングを指定します。 既定の動作では、InstanceContextMode 値に従ってサービス オブジェクトをリサイクルします。 ReleaseInstanceMode プロパティを設定すると、この既定の動作が変更されます。
ReleaseInstanceMode は、スレッドの保証を行いません。 サービスの実行時に、新しい変更されていないオブジェクトを用意する必要がある場合は、InstanceContextMode プロパティを PerCall に設定します。
トランザクション シナリオでは、ReleaseInstanceMode プロパティは、メソッドの呼び出しを処理する前に、サービス オブジェクトに関連付けられた古いデータがクリーンアップされることを保証するためにしばしば使用されます。 ReleaseServiceInstanceOnTransactionComplete プロパティを true
に設定することで、トランザクションが正常に完了した後で、トランザクションに関連付けられたサービス オブジェクトがリサイクルされることを保証できます。
次の動作を選択できます。
操作が呼び出される前に、サービス オブジェクトをリサイクルします。
操作が呼び出された後で、サービス オブジェクトをリサイクルします。
操作の呼び出しの前後の両方で、サービス オブジェクトをリサイクルします。
リサイクル動作はありません。
OperationBehaviorAttribute を使用して、双方向クライアント アプリケーションでコールバック コントラクト操作を設定することもできます。 コールバック操作で使用する場合は、ReleaseInstanceMode プロパティが None である必要があります。そうでない場合は、InvalidOperationException 例外が実行時にスローされます。
さらに、サービスがサービス オブジェクトを ServiceHost.ServiceHost(Object, Uri[]) コンストラクターに渡すことで作成される場合、このプロパティの値は、None であるかのように処理されることを認識しておくことが重要です。