OperationBehaviorAttribute.ReleaseInstanceMode プロパティ


操作呼び出しのどの時点でサービス オブジェクトをリサイクルするかを示す値を取得または設定します。Gets or sets a value that indicates when in the course of an operation invocation to recycle the service object.

 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 つです。One of the ReleaseInstanceMode values. 既定では、 Noneです。The default is None.


値が、ReleaseInstanceMode 値ではありません。The value is not one of the ReleaseInstanceMode values.

ReleaseInstanceMode を使用して呼び出しの前後にサービス オブジェクトをリサイクルするコード例を次に示します。The following example code shows the use of ReleaseInstanceMode to recycle service objects both before and after a call.

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);
  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;

    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


メソッドの実行中に Windows Communication Foundation (WCF) がサービスオブジェクトをリサイクルするタイミングを指定するには、ReleaseInstanceMode プロパティを使用します。Use the ReleaseInstanceMode property to specify when Windows Communication Foundation (WCF) recycles a service object in the course of executing a method. 既定の動作では、InstanceContextMode 値に従ってサービス オブジェクトをリサイクルします。The default behavior is to recycle a service object according to the InstanceContextMode value. ReleaseInstanceMode プロパティを設定すると、この既定の動作が変更されます。Setting the ReleaseInstanceMode property changes that default behavior.

ReleaseInstanceMode は、スレッドの保証を行いません。The ReleaseInstanceMode makes no threading guarantees. サービスの実行時に、新しい変更されていないオブジェクトを用意する必要がある場合は、InstanceContextMode プロパティを PerCall に設定します。If you must have a new, unmodified object when your service runs, set the InstanceContextMode property to PerCall.

トランザクション シナリオでは、ReleaseInstanceMode プロパティは、メソッドの呼び出しを処理する前に、サービス オブジェクトに関連付けられた古いデータがクリーンアップされることを保証するためにしばしば使用されます。In transaction scenarios, the ReleaseInstanceMode property is often used to ensure that old data associated with the service object is cleaned up prior to processing a method call. ReleaseServiceInstanceOnTransactionComplete プロパティを true に設定することで、トランザクションが正常に完了した後で、トランザクションに関連付けられたサービス オブジェクトがリサイクルされることを保証できます。You can also ensure that service objects associated with transactions are recycled after the transaction successfully completes by setting the ReleaseServiceInstanceOnTransactionComplete property to true.

次の動作を選択できます。You can choose the following behaviors:

  • 操作が呼び出される前に、サービス オブジェクトをリサイクルします。Recycle a service object before an operation is called.

  • 操作が呼び出された後で、サービス オブジェクトをリサイクルします。Recycle a service object after an operation is called.

  • 操作の呼び出しの前後の両方で、サービス オブジェクトをリサイクルします。Recycle a service object both before and after an operation is called.

  • リサイクル動作はありません。No recycling behavior.

OperationBehaviorAttribute を使用して、双方向クライアント アプリケーションでコールバック コントラクト操作を設定することもできます。You can also use OperationBehaviorAttribute to configure a callback contract operation in a duplex client application. コールバック操作で使用する場合は、ReleaseInstanceMode プロパティが None である必要があります。そうでない場合は、InvalidOperationException 例外が実行時にスローされます。When used on a callback operation, the ReleaseInstanceMode property must be None or an InvalidOperationException exception is thrown at runtime.

さらに、サービスがサービス オブジェクトを ServiceHost.ServiceHost(Object, Uri[]) コンストラクターに渡すことで作成される場合、このプロパティの値は、None であるかのように処理されることを認識しておくことが重要です。In addition, it is important to realize that if the service is created by passing a service object to the ServiceHost.ServiceHost(Object, Uri[]) constructor, the value of this property is treated as if it were None.