Способы представления удаленных объектов

Платформа. NET предоставляет два варианта того, как предоставить удаленный объект клиенту. В основе каждого из них используется понятие маршалинга. Маршализация (marshaling) описывает способ передачи удаленного объекта между доменами приложений. При проектировании удаленного объекта можно выбирать между семантикой маршализации по ссылке (marshal-by-reference — MBR) и маршализации по значению (marshal-by-value — MBV). Разница состоит в следующем:

  • объекты MBR — вызывающий код получает прокси к удаленному объекту. Другими словами вызывающий объект получает в свое распоряжение локального представителя (заместителя) удаленного объекта;
  • объекты MBV — вызывающий код получает копию объекта в своем собственном домене приложения. Это означает создание локальной копии удаленного объект в адресном пространстве вызывающего объекта.

При конфигурировании типа объекта MBR среда CLR обеспечивает создание прозрачного и реального прокси в домене приложения клиента, в то время как сам объект MBR остается в домене приложения сервера. Когда клиент вызывает методы удаленного типа, механизм удаленного взаимодействия. NET берет дело в свои руки и пакует, передает и возвращает информацию через границы доменов приложений. Объекты MBR имеют множество особенностей, помимо их физического расположения. Например, объекты MBR имеют различные настройки конфигурации, касающиеся опций активизации и управления жизненным циклом.

Объекты MBV, с другой стороны, являются локальными копиями удаленных объектов. Объекты MBV имеют намного меньше настроек конфигурации, учитывая, что их время жизни напрямую контролируется клиентом. Подобно любому объекту. NET, как только клиент освобождает все ссылки на тип MBV, он становится кандидатом на сборку мусора.

Учитывая, что типы MBV являются локальными копиями удаленных объектов, и клиент вызывает члены объекта этого типа в своем адресном пространстве, то никакой сетевой активности это уже не требует. Однако, довольно часто один сервер может представлять доступ к множеству типов MBR и MBV. И как можно было бы ожидать, типы MBR имеют тенденцию поддерживать методы, возвращающие различные типы MBV, что дает возможность узнать шаблон фабрики классов (т.е. объект, который создает и возвращает другие связанные с ним удаленные объекты). Каким же образом в таких случаях конфигурировать пользовательские типы классов как сущности MBR или MBV?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: