TimeSpan CurrentLeaseTime { get; }
LeaseState CurrentState { get; }
TimeSpan InitialLeaseTime { get; set; }
TimeSpan RenewOnCallTime { get; set; }
TimeSpan SponsorshipTimeout { get; set; }
void Register(System.Runtime.Remoting.Lifetime.ISponsor obj);
void Register(System.Runtime.Remoting.Lifetime.ISponsor obj, TimeSpan renewalTime);
TimeSpan Renew(TimeSpan renewalTime);
void Unregister(System.Runtime.Remoting.Lifetime.ISponsor obj);
}
Интерфейс ILease не только позволяет получить информацию о текущих параметрах лизинга (с помощью CurrentLeaseTime, CurrentState и InitialLeaseTime), но и обеспечивает возможность построения "спонсоров" лизинга (более подробно об этом будет говориться позже). Роль каждого из членов ILease описана в табл. 18.6.
Таблица 18.6. Члены интерфейса ILease
Член | Описание |
---|---|
CurrentLeaseTime | Читает информацию о времени, оставшемся до отключения данного объекта при отсутствии новых вызовов методов объекта |
CurrentState | Читает информацию о текущем состоянии лизинга, представленную значением перечня LeaseState |
InitialLeaseTime | Читает или устанавливает исходное время лизинга. Исходное время лизинга – это время от начала активизации объекта до истечения лизинга при отсутствии новых вызовов методов объекта |
RenewOnCallTime | Читает или устанавливает значение времени, на которое вызов удаленного объекта увеличивает значение CurrentLeaseTime |
SponsorshipTimeout | Читает или устанавливает значение времени ожидания спонсора для возвращения времени возобновления лизинга |
Register | Перегруженный метод, регистрирующий спонсора данного лизинга |
Renew | Возобновляет лизинг с указанным временем |
Unregister | Удаляет указанный спонсор из списка спонсоров |
Для иллюстрации особенностей лизинга по умолчанию для удаленных СAО-типов и WKO-синглетов определим в нашем текущем проекте CAOCarGeneralAsm новый внутренний класс LeaseInfo. Статический член LeaseStats этого класса выводит информацию о текущем лизинге для типа CarProvider в окно консоли сервера (не забудьте указать директиву using для пространства имен System.Runtime.Remoting.Lifetime, чтобы сообщить компилятору о месте нахождения определении типа ILease).
internal class LeaseInfo {
public static void LeaseStats(ILease itfLease) {
Console.WriteLine(***** Информация о лизинге *****");
Console.WriteLine("Состояние лизинга: {0}", itfLease.CurrentState);
Console.WriteLine("Начальное время лизинга: {0}:{1}", itfLease.InitialLeaseTime.Minutes, itfLease.InitialLeaseTime.Seconds);
Console.WriteLine("Текущее время лизинга: {0}:{1}", itfLease.CurrentLeaseTime.Minutes, itfLease.CurrentLeaseTime.Seconds);
Console.WriteLine("Обновление времени при вызове: {0}:{1}", itfLease.RenewOnCallTime.Minutes, itfLease.RenewOnCallTime.Seconds);
Console.WriteLine;
}
}