DCOM - что это такое

DCOM (англ. Distributed COM) — расширение Component Object Model для поддержки связи между объектами на различных компьютерах по сети.

Принцип работы

Для создания объекта на удалённой машине, библиотека COM:

  1. вызывает менеджер управления сервисами (SCM) локального компьютера
  2. в свою очередь SCM локального компьютера связывается с SCM сервера и передаёт ему запрос на создание объекта.

Имя сервера может задаваться при вызове функции создания объекта или храниться в реестре.

Для вызова удалённого объекта параметры должны быть извлечены из стека (или из регистров процессора), помещены в буфер и переданы через сеть (маршалинг)
На сервере производится обратный процесс воссоздания стека, называемый демаршалинг, после чего вызывается требуемый объект.

После завершения вызова производится маршалинг возвращаемого значения и выходных параметров и отправка их клиенту.

Для выполнения маршалинга и демаршалинга необходимо иметь точное описание метода, включая все типы данных и размеры массивов. Для описания используется язык описания интерфейсов (IDL), входящий в стандарт DCE RPC.

Полученные файлы описания компилируются специальным компилятором IDL в исходный код на языке Си, производящий маршалинг и демаршалинг для указанных интерфейсов.

Термины

Код, запускаемый =

  1. на стороне клиента, называется «прокси»
  2. на стороне объекта – «стаб» (то есть на "удалённой" стороне)

Код загружается библиотекой COM по необходимости.

Объектный RPC

Протокол DCOM, известный как объектный RPC (ORPC) является расширением протокола DCE RPC. ORPC использует стандартные пакеты RPC с дополнительной, необходимой для DCOM информацией.
Заголовок вызова содержит идентификатор указателя интерфейса (IPID), который используется для идентификации необходимого интерфейса необходимого объекта на сервере, а параметры начинаются с дополнительного неявного аргумента.

Данные в пакете ORPC передаются в стандартном формате NDR с дополнительным типом данных, представляющем собой идентификатор объекта.

Клиент должен периодически подтверждать свою активность путём «пингования» сервера. Если период пингования истёк без получения «пинга», считается, что клиент завершил работу аварийно и все его ссылки на интерфейсы объекта уничтожаются.