リースの初期化

MarshalByRefObject インスタンス (MBR) は、それらのインスタンス自体のリース期間を生成できます。また、アプリケーション構成ファイルまたはコンピュータ構成ファイルの <lifetime> 要素で指定されたリースのプロパティを使用するように構成することもできます。有効期間プロパティの設定は、リースが初期状態にある場合、つまり InitializeLifetimeService の呼び出しによってリースが作成された直後にのみ機能します。それ以降の呼び出しでは効果がありません。

InitializeLifetimeService のオーバーライド

オーバーライドされた InitializeLifetimeServiceILease lease = (ILease)base.InitializeLifetimeService(); メソッドが呼び出されると、オブジェクトに既存のリースが返されます。リースが存在しない場合は、新しいリースが返されます。リースのプロパティは、新しいリースが返された場合にのみ設定できます。その場合は、状態が LeaseState.Initial であることを確認してください。そうでない場合、例外がスローされます。

有効期間サービスに影響を与える唯一の呼び出しが、.NET リモート処理インフラストラクチャからの InitializeLifetimeService に対する呼び出しです。これにより、リースがアクティブ化されます。他のコードでも InitializeLifetimeService を呼び出してリースを作成できますが、このリースは .NET リモート処理インフラストラクチャに返されるまでは初期状態にとどまります。初期状態でない既存のリースには、新しい値を設定できません。しかし、新しいシンクは、そのリースをインフラストラクチャに返し、オブジェクトの複数のシンクが同じリースを指せるようにできます。

リース期間が 0 (ゼロ) の場合には、リースは生成されないか、または null のリースが返されます。RenewOnCallTime が 0 (ゼロ) の場合には、シンクは生成されませんが、リースは生成されます。

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

InitializeLifetimeService インターフェイスのオーバーライド方法の詳細については、asdasdasdasdasdasd を参照してください。

参照

処理手順

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

概念

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