ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Например, при каждом вызове клиентом члена удаленного MBR-обьекта, являющегося САО-типом или WKO-синглетом, время лизинга снова устанавливается равным пяти минутам. Но кроме автоматического обновления интервала времени лизинга при вызове клиента, среда выполнения .NET обеспечивает три дополнительные альтернативы.
• Установки лизинга по умолчанию для удаленных объектов могут переопределяться файлами *.config.
• Могут использоваться спонсоры лизинговой схемы сервера, действующие от имени удаленного объекта, время лизинга которого уже истекло.
• Могут использоваться спонсоры лизинговой схемы клиента, действующие от имени удаленного объекта, время лизинга которого уже истекло.
Мы
Интерфейс 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).Теперь предположим, что LeaseInfo.LeaseStats вызывается в рамках методов GetJBCByIndex и GetAllAutos типа CarProvider. После перекомпиляции компоновочных блоков сервера и клиента (снова для гарантии того, что система Visual Studio 2005 скопирует самую последнюю и наиболее полную версию CarGeneralAsm.dll в каталоги приложений клиента и сервера), выполните приложение еще раз. Окно консоли вашего сервера должно теперь быть похожим на то, которое показано на рис. 18.6.
Рис. 18.6. Информация лизинга по умолчанию для CarProvider
Изменение параметров схемы лизингового управления
Очевидно, параметры лизинга по умолчанию не могут годиться во всех случаях и для всех удаленных САО-объектов и WKO-синглетов. Если вы хотите изменить типовые установки, у вас на выбор есть два варианта.
• Установки лизинга, принятые по умолчанию, можно изменить с помощью файла *.config сервера.
• Установки лизинга, принятые по умолчанию, можно изменить программными средствами путем переопределения членов базового класса MarshalByRefObject.
Каждый из этих подходов действительно позволяет изменить установки лизинга, принятые по умолчанию, но между этими подходами есть принципиальная разница. При использовании файла *.config сервера установки лизинга применяются ко всем объектам, размещаемым в рамках процесса сервера. При переопределении отдельных членов типа MarshalByRefObject появляется возможность изменять установки лизинга для каждого объекта в отдельности.
Чтобы продемонстрировать изменение параметров лизинга по умолчанию с помощью файла *.config, добавим к XML-данным сервера дополнительный элемент ‹lifetime›.