Теперь предположим, что LeaseInfo.LeaseStats вызывается в рамках методов GetJBCByIndex и GetAllAutos типа CarProvider. После перекомпиляции компоновочных блоков сервера и клиента (снова для гарантии того, что система Visual Studio 2005 скопирует самую последнюю и наиболее полную версию CarGeneralAsm.dll в каталоги приложений клиента и сервера), выполните приложение еще раз. Окно консоли вашего сервера должно теперь быть похожим на то, которое показано на рис. 18.6.
Рис. 18.6. Информация лизинга по умолчанию для CarProvider
Изменение параметров схемы лизингового управления
Очевидно, параметры лизинга по умолчанию не могут годиться во всех случаях и для всех удаленных САО-объектов и WKO-синглетов. Если вы хотите изменить типовые установки, у вас на выбор есть два варианта.
• Установки лизинга, принятые по умолчанию, можно изменить с помощью файла *.config сервера.
• Установки лизинга, принятые по умолчанию, можно изменить программными средствами путем переопределения членов базового класса MarshalByRefObject.
Каждый из этих подходов действительно позволяет изменить установки лизинга, принятые по умолчанию, но между этими подходами есть принципиальная разница. При использовании файла *.config сервера установки лизинга применяются ко
Чтобы продемонстрировать изменение параметров лизинга по умолчанию с помощью файла *.config, добавим к XML-данным сервера дополнительный элемент ‹lifetime›.
‹configuration›
‹system.runtime.remoting›
‹application›
‹lifetime leaseTime = "15M" renewOnCallTime = "5M"/›
‹service›
‹activated type="CarGeneralAsm.CarProvider, CarGeneralAsm" /›
‹/service›
‹channels›
‹channel ref="tcp" port="32469" /›
‹/channels›
‹/application
‹/system.runtime.remoting›
‹/configuration›
Обратите внимание на то, что в значениях свойств leaseTime и renewOnCallTime используется суффикс M, который, как вы можете догадаться сами, при установке времени для лизинга обозначает использование минут в качестве единицы измерения. При необходимости числовые значения элемента ‹lifetime› могут также содержать суффиксы MS (миллисекунды), S (секунды), Н (часы) и даже D (дни).
Повторим, что при изменении файла *.config сервера вы изменяете параметры лизинга для каждого САО-объекта и WKO-синглета в рамках сервера. Как альтернативу, можно использовать программное переопределение метода InitializeLifetime конкретного удаленного типа.
public class CarProvider: MarshalByRefObject {
public override object InitializeLifetimeService {
// Получение текущей информации лизинга.
ILease itfLeaseInfo = (ILease)base.InitializeLifetimeService;
// Изменение установок.
itfLeaseInfo.InitialLeaseTime = TimeSpan.FromMinutes(50);
itfLeaseInfo.RenewOnCallTime = TimeSpan.FromMinutes(10);
return itfLeaseInfo;
}
…
}
Здесь CarProvider устанавливает значение 50 минут для InitialLeaseTime и значение 10 – для RenewOnCallTime. Снова подчеркнем, что преимуществом переопределения метода InitializeLifetimeServices является возможность, настройки каждого удаленного типа в отдельности.
Наконец, чтобы вообще отключить ограничения для времени лизинга данного СAО-типа или WKO-синглета, переопределите InitializeLifetimeServices так, чтобы возвращалось значение null. В результате вы, по сути, укажете МВR-тип, который будет существовать всё время, пока будет работать хост-приложение сервера.
Настройка параметров лизинга на стороне сервера