次の方法で共有


リースの初期化

このトピックの対象は、既存のアプリケーションとの下位互換性のために残されているレガシ テクノロジに特定されています。新規の開発には、このトピックを適用しないでください。分散アプリケーションは、現在は Windows Communication Foundation (WCF) を使用して開発する必要があります。

MarshalByRefObject 派生クラスがインスタンス化されるときに、.NET リモート処理フレームワークによってオブジェクトの InitializeLifetimeService メソッドが呼び出されます。このメソッドは、リモート オブジェクトの既定の有効期間値を含むリース オブジェクトを返します。この既定値を変更するには、サーバー アプリケーション構成ファイルで代替値を指定するか (<lifetime> 要素を使用)、または InitializeLifetimeService をオーバーライドします。

構成ファイルで代替値を指定すると、サーバー アプリケーションがホストするすべてのオブジェクトの既定の有効期間値が変更されるので注意してください。InitializeLifetimeService をオーバーライドする場合は、特定のクラスの既定の有効期間値のみを変更できます。

InitializeLifetimeService のオーバーライド

InitializeLifetimeService をオーバーライドする場合は、CurrentState の値を確認する必要があります。リースの値を変更できるのは、CurrentStateInitial である場合だけです。

有効期間サービスに影響する唯一の呼び出しは、.NET リモート処理インフラストラクチャからの InitializeLifetimeService に対する呼び出しです。これによりリースがアクティブになります。他のコードでも InitializeLifetimeService を呼び出してリースを作成できますが、そのリースは .NET リモート処理インフラストラクチャに返されるまで初期状態のままとなります。

InitializeLifetimeService から null が返されると、オブジェクトの有効期間は無期限になり、ホスト アプリケーション ドメインがアンロードされるまでガベージ コレクトが実行されません。

通常、InitializeLifetimeService の実装では、基本クラスの対応するメソッドを呼び出してリモート オブジェクトの既存のリースが取得されます。オブジェクトが一度もマーシャリングされていない場合は、初期状態のリースが返されるため、リースのプロパティを設定できます。オブジェクトが一度でもマーシャリングされていると、リースが初期状態からアクティブ状態に移行するため、リースのプロパティを初期化しようとしても無視され、例外がスローされます。InitializeLifetimeService は、リモート オブジェクトがアクティブ化されるときに呼び出されます。アクティベーション呼び出しでリースのスポンサー一覧が提供され、リースがアクティブである間にいつでもスポンサーを追加できます。

InitializeLifetimeService メソッドのオーバーライド方法の詳細については、「方法 : InitializeLifetimeService インターフェイスをオーバーライドする」を参照してください。

参照

処理手順

方法 : InitializeLifetimeService インターフェイスをオーバーライドする

概念

リースの更新
リモート処理の例 : 有効期間
有効期間リース