次の方法で共有


OperationBehaviorAttribute.ReleaseInstanceMode プロパティ

定義

操作の呼び出し中にサービス オブジェクトをリサイクルするタイミングを示す値を取得または設定します。

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されたかのように扱われることを認識することが重要です。

適用対象