.NET Remoting. Час життя об'єктів
Зміст Управління часом життя об'єктів. Загальні положення. Ліцензії. Доступ до ліцензії об'єкта. Управління часом життя та config-файли. Диспетчери (менеджери) ліцензій. Спонсори ліцензій.
Управління часом життя об'єктів. Загальні положення У .NET Remoting підтримуються два види активізації об'єктів: серверна (об'єкти з серверною активізацією SAO) та клієнтська (об'єкти з клієнтською активізацією CAO). До того ж є два режими серверної активізації: Singleton і SingleCall. Управління часом життя об'єктів: - CAO;
- SAO Singleton;
- SAO SingleCall. (Тут ситуація проста. Такі об'єкти створюються при кожному виклику будь-якого з методів і з завершенням виконання метода ліквідовуються – позначаються для вилучення "збирачем сміття”. Отже, підкреслимо, що на такі об'єкти – на об'єкти SAO SingleCall викладені далі принципи управління часом життя не розповсюджуються).
-
Загалом керування часом життя об'єктів ґрунтується на поняттях ліцензій, спонсорів та диспетчерів ліцензій.
Ліцензії При активізації віддаленого об'єкта CLR отримує (і передає диспетчеру для реєстрації) дані стосовно ліцензії цього об'єкта. Такі дані надаються методом InitializeLifetimeService і визначають початкові умови стосовно життєдіяльності об'єкта (зазначений метод може перевизначатись у конкретному серверному класі, що успадковується від System.MarshalByRefObject ). Особливості існування remotable-об'єктів (їх ліцензії) визначаються реалізацією “ліцензійного” інтерфейсу ILease. Інтерфейс ILease (з простору імен SystemRuntime.Remoting.Lifetime) має кілька властивостей, які дозволяють “управляти” часом життя об'єктів.
Основні властивості (properties) інтерфейсу ILease
Перевизначення метода InitializeLifetimeService. Приклад. Виконання програм
Перевизначення метода InitializeLifetimeService. Приклад. Виконання програм
Перевизначення метода InitializeLifetimeService. Об'єкти з необмеженим терміном ліцензії
Перевизначення метода InitializeLifetimeService. Об'єкти з необмеженим терміном ліцензії - 2
Управління часом життя. Config-файли Окрім перевизначення метода MarshalByRefObject.InitializeLifetimeService існує ще одна можливість встановлення початкових умов життєдіяльності об'єктів, а саме використовуючи файли конфігурації (config). Умови існування об'єктів задаються атрибутами елемента <lifetime>. Зауваження. Початкові умови існування, що задаються таким чином, стосуються всіх об'єктів для всіх remotable-класів (!) у серверному процесі. Приклад. Файл Host.exe.config (він, звичайно, повинен бути зареєстрований, використовуючи RemotingConfiguration.Configure):
. . . . . . . . .
Доступ до ліцензії об'єкта та управління його часом життя У серверній програмі: метод (серверного об'єкта) GetLifetimeService (успадковується від MarshalByRefObject) дозволяє отримати посилання на інтерфейс ILease . Далі, наприклад, можна викликати ILease.CurrentLeaseTime (для перевірки часу, що залишився) та ILease.Renew (для продовження терміну існування). У клієнтській програмі : (статичний) метод RemotingServices.GetLifetimeService також дозволяє отримати посилання на інтерфейс ILease. Далі так само можна викликати ILease.CurrentLeaseTime, ILease.Renew.
Диспетчери (менеджери) ліцензій. Спонсори ліцензій При активізації віддаленого об'єкту CLR отримує (і передає диспетчеру для реєстрації) дані стосовно ліцензії цього об'єкта. Диспетчер ліцензій (lease manager) є у кожнім домені. Він періодично (за замовчуванням кожні 10 секунд) перевіряє зареєстровані об'єктні ліцензії, чи не завершився їх термін. (Періодичність опитування ліцензій можна змінити: LifetimeServices.LeaseManagerPollTime = System.TimeSpan.FromMinutes(1);) При завершенні терміну ліцензії об'єкт усе ж має можливість продовжити час свого існування за наявності спонсорів, зареєстрованих у ліцензіях. В інтерфейсі ILease визначені методи Register та Unregister для реєстрації (відповідно де- реєстрації) спонсорів.
Спонсори Спонсори – це об'єкти, що реалізують інтерфейс System.Runtime.Remoting.Lifetime.ISponsor. Інтервал часу, на який спонсор продовжує ліцензію, задається властивістю ISponsor.RenewalTime. Спонсори можуть бути зареєстровані як серверною, так і клієнтською програмами, використовуючи доступ до ліцензії. Властивість ILease.SponsorshipTimeout визначає час очікуванні відповіді спонсора (виклику Renewal). (Нагадаємо, що спонсор може бути на іншій машині). Є “готовий” клас-спонсор ClientSponsor (див. додаток) у просторі імен System.Runtime.Remoting.Lifetime.
Спонсори. Приклад (1/3)
Спонсори. Приклад (2/3)
Спонсори. Приклад (3/3)
Спонсори. Приклад. Виконання
Додаток
Основні властивості інтерфейсу ILease
Інтерфейс ILease
Інтерфейс ISponsor
Клас ClientSponsor
Managing the Lifetime of Remote .NET Objects with Leasing and Sponsorship (msdn.microsoft.com) To configure global defaults programmatically, use the static properties of the LifetimeServices class defined in the System.Runtime.Remoting.Lifetime namespace: You typically use these properties in the Main method of your host (the application assembly hosting the remote objects) as shown in the following code snippet:
ILease.CurrentState CurrentState is read-only property of the ILease interface. CurrentState is of the enum type LeaseState:
|