Спонсоры лизинга сервера (и клиента)

Спонсоры лизинга сервера (и клиента)

Заключительной темой нашего связанного с лизингом обсуждения цикла существования САО-типов и WKO-синглетов будет спонсорство лизинга. Как вы только что убедились, для каждого объекта САО-типа и WKO-синглета имеются параметры лизинга, используемые по умолчанию, которые можно изменить несколькими способами, как на стороне сервера, так и на стороне клиента. Но, независимо от конфигурации лизинга типа, в конечном итоге время лизинга MBR-объекта истечет. В этот момент среда выполнения отправит данный объект в "мусорник"… ну, хорошо, почти отправит.

Суть в том, что перед тем, как пометить ненужный тип для отправки сборщику мусора, среда выполнения проверяет, не имеет ли данный MBR-объект зарегистрированных спонсоров лизинга. Простыми словами, спонсор – это тип, реализующий интерфейс ISponsor, который определен так, как показано ниже.

public interface System.Runtime.Remoting.Lifetime.ISponsor {

 TimeSpan Renewal(ILease lease);

}

Если среда выполнения обнаружит, что у MBR-объекта имеется спонсор, этот объект не будет сразу же отправлен сборщику мусора, а будет вызван метод Renewal() объекта спонсора, чтобы (еще раз) добавить время к текущему времени лизинга. С другой стороны, если окажется, что для данного MBR-типа спонсора нет, цикл существования объекта действительно закончится.

Предположим, что вы создали пользовательский класс, реализующий ISponsor и вызывающий метод Renewal() для возврата конкретной величины времени (через тип TimeSpan). Тогда как ассоциировать указанный тип с данным удаленным объектом? И снова это может быть сделано либо доменом приложения сервера, либо доменом приложения клиента.

Для этого заинтересованная сторона должна получить ссылку ILease (с помощью наследуемого метода GetLifetimeService() на стороне сервера или статического метода RemotingServices.GetLifetimeService() на стороне клиента) и вызвать Register().

// Регистрация спонсора на стороне сервера.

CarSponsor mySponsor = new CarSponsor();

ILease itfLeaseInfo = (ILease)this.GetLifetimeService();

itfLeaseInfo.Register(mySponsor);

// Регистрация спонсора на стороне клиента.

CarSponsor mySponsor = new CarSponsor();

CarProvider cp = new CarProvider(cars);

ILease itfLeaseInfo = (ILease)Remoting.Services.GetLifetimeService(cp);

itfLeaseInfo.Register.(mySponsor);

В любом случае, если клиент или сервер желают отменить спонсорство, это можно сделать с помощью метода ILease.Unregister(), например:

// Отключение спонсора для данного объекта.

itfLeaseInfo.Unregister(mySponsor);

Замечание. Объекты клиента, имеющие спонсоры, кроме необходимости реализации ISponsor должны быть производными от MarshalByRefObject, поскольку клиент должен передать спонсор в удаленный домен приложения.

Как видите, управление циклом существования MBR-типов, кумулятивно изменяющих параметры своего состояния в процессе выполнения вызовов клиентов, оказывается немного более сложным, чем простая сборка мусора. На стороне преимуществ мы имеем широкие возможности управления относительно того, когда именно следует уничтожить удаленный тип. С другой стороны, существует вероятность того, что удаленный тип будет уничтожен без ведома клиента. Если клиент попытается вызвать члены типа, уже удаленного из памяти, среда выполнения сгенерирует исключение System.Runtime.Remoting.RemotingException, и в этот момент клиент может либо создать новый экземпляр удаленного типа, либо выполнить другие предусмотренные для такого случая действия.

Исходный код. Проекты CAOCarGeneralAsmLease, CAOCarProviderServerLease и CAOCarProviderClientLease размещены в подкаталоге, соответствующем главе 18.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Спонсоры

Из книги Как найти высокооплачиваемую работу с помощью Internet автора Рудинштейн Марк


Настройка параметров лизинга на стороне сервера

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Настройка параметров лизинга на стороне сервера Вы только видели, что переопределение метода InitializeLifetimeServices() MBR-типом позволяет изменить текущие параметры лизинга во время активизации типа. Но что делать, если удаленному типу нужно изменить параметры лизинга после


Настройка параметров лизинга на стороне клиента

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Настройка параметров лизинга на стороне клиента В дополнение к указанным возможностям ILease, домен приложения клиента тоже может регулировать текущие параметры лизинга CAO-типов и WKD-сингле-тов, с которыми осуществляется удаленное взаимодействие. Для этого клиент должен


15.11. Досрочное завершение клиента или сервера

Из книги Сетевые средства Linux автора Смит Родерик В.

15.11. Досрочное завершение клиента или сервера В наших примерах до настоящего момента предполагалось, что в процессе работы клиента и сервера не возникает непредусмотренных ситуаций. Посмотрим, что произойдет, если у клиента или сервера возникнут ошибки. В случае если


16.7. Досрочное завершение сервера или клиента

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора Парабеллум Андрей Алексеевич

16.7. Досрочное завершение сервера или клиента Рассмотрим, что произойдет в случае досрочного завершения клиента или сервера при использовании транспортного протокола TCP. Поскольку протокол UDP не подразумевает установку соединения, при завершении процесса его


Указание LPRng-сервера на стороне клиента

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

Указание LPRng-сервера на стороне клиента Файл /etc/printcap в системе LPRng используется аналогично одноименному файлу в системе BSD LPD. В частности, опции lp, rm и rp, которые обсуждались выше в данной главе, применимы как в BSD LPD, так и в LPRng. Большинство других опций также может


Определение сервера CUPS на стороне клиента

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Определение сервера CUPS на стороне клиента Для добавления принтеров к системе CUPS используется утилита lpadmin, вызываемая из командной строки или доступная посредством специального графического интерфейса. Кроме того, эта задача может решаться с помощью Web-броузера; для


Хранение писем на стороне клиента и на стороне сервера

Из книги Linux и все, все, все... Статьи и колонки в LinuxFormat, 2006-2013 автора Федорчук Алексей Викторович

Хранение писем на стороне клиента и на стороне сервера Как было сказано ранее, одна из функций сервера, реализующего протокол получения почты, состоит в том, чтобы хранить сообщения до тех пор, пока пользователь не обратится за ними. Когда клиент-программа обращается к


Взаимодействие клиента и сервера в системе X Window

Из книги автора

Взаимодействие клиента и сервера в системе X Window Пользователи, не искушенные в вопросах применения вычислительной техники и сетевых протоколов, представляют себе сервер как большой мощный компьютер, находящийся в отдельной комнате. Пользователи работают за клиентскими


Взаимодействие клиента и сервера VNC

Из книги автора

Взаимодействие клиента и сервера VNC Излагая материал данной главы, я пытался обратить внимание на роль различных клиентских и серверных программ в процессе сетевого взаимодействия. Как вы уже знаете, один и тот же компьютер может действовать как сервер по одному


Создание резервной копии клиента Windows с помощью сервера Linux

Из книги автора

Создание резервной копии клиента Windows с помощью сервера Linux Резервное копирование, инициализируемое сервером, с применением Samba осуществляется почти так же, как и копирование по инициативе сервера с использованием NFS, но работа с продуктом Samba и системой Windows имеет ряд


5.3.4. Конфигурирование клиента SSH

Из книги автора

5.3.4. Конфигурирование клиента SSH Настройки SSH-клиента содержат еще меньше параметров. В файле /etc/ssh/ssh_config находятся глобальные настройки для всех пользователей в системе. Но вы можете для любого из них переопределить произвольный параметр в файле .ssh_config из директории


8.9. Запуск клиента без запуска сервера

Из книги автора

8.9. Запуск клиента без запуска сервера Следующий сценарий, который мы рассмотрим, — это запуск клиента без запуска сервера. Если мы сделаем так и введем одну строку на стороне клиента, ничего не будет происходить. Клиент навсегда блокируется в своем вызове функции recvfrom,


Глава 30 Альтернативное устройство клиента и сервера

Из книги автора

Глава 30 Альтернативное устройство клиента и сервера 30.1. Введение При написании сервера под Unix мы можем выбирать из следующих вариантов управления процессом:? Наш первый сервер, показанный в листинге 1.5, был последовательным (iterative), но количество сценариев, для которых


Open Source: разработчики и спонсоры

Из книги автора

Open Source: разработчики и спонсоры LinuxFormat, #79 (май 2006)Когда Red Hat и Novell диверсифицировали линейки своих Linux-дистрибутивов на как бы коммерческие и стопроцентно свободные ветви, они пошли разными путями. Во взаимоотношениях Suse и OpenSuse все ясно: вторая представляет собой, по сути,