リースの更新

リースがいったん作成されると、そのリースで変更できるプロパティは ILease.CurrentLeaseTime だけです。リースを更新するには、クライアントが ILease.Renew を直接呼び出すか、またはスポンサーに接続してリースの更新を要求する、という 2 種類の方法があります。

スポンサー

スポンサーは、特定のオブジェクトの有効期間リースを延長するかどうかについてホスト アプリケーション ドメインからのクエリをリッスンします。スポンサーは ISponsor を実装します。また、リースへの参照を取得して ILease.Register を呼び出すことにより、リース マネージャに登録されます。一般に、1 つのリモート オブジェクトに対して多数のクライアントが存在する場合には、すべてのクライアントがリモート オブジェクトに対して要求を送信するより、リモート オブジェクトからクライアントの 1 つに対してリースの更新の要求を送信する方が効率的です。

Noteメモ :

.NET Framework バージョン 1.1 以降では、サーバー オブジェクトの有効期間に参加するためにスポンサーを登録するには、サーバー アプリケーション ドメインとスポンサーの両方で、自動逆シリアル化の設定を Full にする必要があります。詳細については、「.NET リモート処理での自動逆シリアル化」を参照してください。

スポンサーを使用すると、多数のクライアントのための動的な更新ポリシーを提供できます。これによって、1 つ以上のクライアントが複数のリモート オブジェクトに問題解決を要求する場合に、効率的な処理ができる可能性があります。リモート オブジェクトがソリューションを返すと、スポンサーは通知を受けて他のすべてのリモート オブジェクトのリースを期限切れにします。

このアプローチは、リモート オブジェクトを移動する場合にも役立ちます。これは、リモート オブジェクトが現在の位置からクライアントに接続するため、移動したリモート オブジェクトをクライアントが探し出す必要がないからです。

また、スポンサーが大きなネットワークの外側にあったり、多くのファイアウォールを持つインターネット内にあったりする場合は、探し出すのが難しくなります。この問題は、バックアップ スポンサーを持つか、スポンサーをホスト アプリケーション ドメインに近い場所に置き、ある程度の信頼度でアクセスできるようにすることで解決できます。

ホスト アプリケーション ドメインのリース マネージャは、スポンサーの一覧を維持しています。リースの有効期間を更新するためにスポンサーが必要な場合は、一覧の先頭にあるスポンサーに対して期間を更新するように要求します。スポンサーが ILease.SponsorshipTimeout で指定された期間内に応答しない場合、そのスポンサーは一覧から削除され、一覧の 2 番目にあるスポンサーが呼び出されます。

スポンサーを使用したリースの更新

スポンサーは、特定のオブジェクト参照のリースを取得し、自分自身をスポンサーとして登録し、リモートのリース マネージャが ISponsor.Renewal の呼び出しを待機することで、有効期間リースに参加します。オブジェクトのリースは、RemotingServices.GetLifetimeService を呼び出し、リースを必要とするオブジェクトをパラメータとして渡すことで取得します。この呼び出しは、RemotingServices クラスの静的メソッドです。オブジェクトがアプリケーション ドメインのローカルにある場合、この呼び出しのパラメータはオブジェクトへのローカル参照で、返されるリースはそのリースへのローカル参照です。オブジェクトがリモートの場合は、プロキシがパラメータとして渡されます。リース自体は参照渡しでマーシャリングされる (MBR : Marshal-By-Reference) オブジェクトなので、リモート オブジェクトのリースを取得すると、そのリースのプロキシが返されます。そのため、リース上のメソッドへの呼び出しは、サーバー プロセスへのリモート呼び出しになります。

次に、Register を呼び出し、スポンサーと、オブジェクトが作成直後の場合にはオプションの TimeSpan オブジェクトを渡して、スポンサーをリモートのリース マネージャに登録します。

このオブジェクトのリースが期限切れになると、リース マネージャの側からリモート スポンサーを呼び出す場合があります。Renewal の実装に対するスポンサーの戻り値が、新しいリース期間になります。

参照

処理手順

方法 : リースを更新する

関連項目

<lifetime> 要素
リモート処理設定スキーマ

概念

リモート処理の例 : 有効期間
有効期間リース
リースの初期化