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 値の 1 つではありません。
例
次のコード例は、呼び出しの前後にサービス オブジェクトをリサイクルするために 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 プロパティを使用して、メソッドの実行中に Windows Communication Foundation (WCF) がサービス オブジェクトをリサイクルするタイミングを指定します。 既定の動作では、 InstanceContextMode 値に従ってサービス オブジェクトをリサイクルします。 ReleaseInstanceMode プロパティを設定すると、既定の動作が変更されます。
ReleaseInstanceModeでは、スレッドが保証されません。 サービスの実行時に変更されていない新しいオブジェクトが必要な場合は、 InstanceContextMode プロパティを PerCall に設定します。
トランザクション シナリオでは、 ReleaseInstanceMode プロパティは、メソッド呼び出しを処理する前に、サービス オブジェクトに関連付けられている古いデータを確実にクリーンアップするためによく使用されます。
ReleaseServiceInstanceOnTransactionComplete プロパティを true に設定することで、トランザクションに関連付けられているサービス オブジェクトがトランザクションが正常に完了した後にリサイクルされるようにすることもできます。
次の動作を選択できます。
操作が呼び出される前にサービス オブジェクトをリサイクルします。
操作の呼び出し後にサービス オブジェクトをリサイクルします。
操作が呼び出される前と後の両方で、サービス オブジェクトをリサイクルします。
リサイクル動作はありません。
OperationBehaviorAttributeを使用して、双方向クライアント アプリケーションでコールバック コントラクト操作を構成することもできます。 コールバック操作で使用する場合は、 ReleaseInstanceMode プロパティを None するか、実行時に InvalidOperationException 例外がスローされる必要があります。
さらに、サービス オブジェクトを ServiceHost.ServiceHost(Object, Uri[]) コンストラクターに渡すことによってサービスが作成された場合、このプロパティの値は Noneされたかのように扱われることを認識することが重要です。