Обновление аренды

Этот раздел относится к технологии прежних версий, которая сохраняется для обеспечения обратной совместимости с существующими приложениями и не рекомендуется для разработки новых приложений. Сейчас распределенные приложения следует создавать с помощью  Windows Communication Foundation (WCF).

После создания аренды единственным свойством, которое можно изменить, является ILease.CurrentLeaseTime. Обновить аренду можно двумя способами: клиент может напрямую вызывать метод ILease.Renew, либо можно связаться со спонсором и запросить обновления аренды.

Спонсоры

Спонсоры ожидают получения запросов из домена основного приложения, чтобы продлить аренду текущего объекта. Спонсоры реализуют интерфейс ISponsor и регистрируются в диспетчере аренды путем получения ссылки на аренду с последующим вызовом метода ILease.Register. В общем случае, если с одним удаленным объектом работает несколько клиентов, более эффективным является решение, при котором удаленный объект отправляет запрос на обновление аренды одному клиенту, а не всем клиентам, которые обращаются к этому удаленному объекту.

8xw7t072.note(ru-ru,VS.100).gifПримечание
Начиная с версии 1.1 платформы .NET Framework для регистрации спонсора, участвующего в управлении временем существования серверного объекта, как в домене серверного приложения, так и у спонсора должен был установлен параметр автоматической десериализации Full. Дополнительные сведения см. в разделе Автоматическая десериализация при удаленном взаимодействии .NET.

При использовании спонсоров также реализуется политика динамического обновления, действие которой распространяется на большое число клиентов. Это может оказаться полезным при параллельном решении задач, когда один или более клиентов передают в удаленные объекты задачи для решения. Когда удаленный объект возвращает решение, спонсор получает уведомление и позволяет истечь другим объектам аренды удаленного объекта.

Кроме того, этот подход удобно использовать при переносе удаленных объектов на другой компьютер, поскольку удаленный объект обращается к клиенту из своего текущего расположения, и клиенту не нужно искать его.

Важно также отметить, что связаться со спонсором может быть нелегко, если он расположен в большой сети или даже в Интернете за несколькими уровнями брандмауэров. На этот случай следует иметь резервные спонсоры или размещать спонсоры вблизи от домена основного приложения, где к ним можно будет успешно обратиться с большей вероятностью.

Диспетчер аренды домена основного приложения поддерживает список спонсоров. Если для обновления времени аренды требуется спонсор, для обновления времени запрашивается первый спонсор из списка. Если спонсор не отвечает в течение времени ILease.SponsorshipTimeout, он удаляется из списка и вызывается следующий спонсор в списке.

Использование спонсора для обновления аренды

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

После этого спонсор регистрируется в удаленном диспетчере аренды путем вызова метода Register и передачи ему спонсора и необязательного объекта TimeSpan, если этот объект был создан перед этим.

После истечения объекта аренды диспетчер аренды может отправить обратный вызов удаленному спонсору. Возвращаемое спонсором значение для его реализации метода Renewal становится новым временем аренды.

См. также

Задачи

Как обновить аренду

Справочник

Элемент <lifetime>
Схема параметров удаленного взаимодействия

Основные понятия

Пример удаленного взаимодействия. Время существования
Аренда времени существования
Инициализация аренды