Клиент
Сервер COM
(библ-ка DLL)Процесс клиента
COM-объект
В этом варианте обращение к объекту только усложняется по сравнению с обычным обращением к DLL. Выигрыш образуется тогда, когда к тому же серверу будут обращаться другие процессы, в том числе и расположенные на удалённых компьютерах.
2) Клиент и сервер располагаются на одном компьютере, но запускаются в разных процессах, например, можно запустить одновременно Excel и Word. В этом случае сервер представляет собой программу, которая способна реагировать на запросы от Word.
Здесь между клиентом и сервером имеется два промежуточных звена. На стороне клиента функционирует объект Proxy. Его задача - при обращении клиента к СОМ-объекту формировать пакет вызова к серверу, а также принимать данные от сервера и реализовывать, таким образом, интерфейс объекта. Объект Proxy является уполномоченным агентом сервера в среде клиента. В адресном пространстве сервера работает другой посредник — stub (переводится по-разному: заглушка, приемник, поглотитель), stub принимает запросы от одного или нескольких клиентских объектов Proxy, помещает их в стек и вызывает нужные методы объектов на сервере, а затем отправляет клиенту полученный результат.
3) Клиент и сервер - разные программы на различных компьютерах в составе сети. Причем эти компьютеры могут быть аппаратно несовместимы и работать под управлением различных операционных систем. Этот вариант и представляет собой технологию DCOM. Передача данных между компьютерами происходит путем использования стандартных протоколов, например TCP/IP.
Процесс сервер
COM-объект
COM
Клиент
Процесс сервера
DCOM
Stub
COM-объект
DCOMУдаленный компьютер
Процесс клиента
Proxy
Stub
Реестр Windows
DCOM позволяет процессу клиента работать с объектами, размещенными на другом компьютере. Однако базовый механизм обмена информацией между объектами, принятый в DCOM, по сути, совпадает с соответствующими механизмами COM. Для программиста разница между технологиями COM и DCOM часто скрывается за различными интерфейсами. Грубо говоря, объект DCOM - это просто реализация интерфейса.
Разницу между COM и DCOM можно увидеть в механизме проверки времени жизни объекта создаваемого на сервере. Если в COM используется простой счётчик запросов на создание и освобождение объекта, то в DCOM запросы на освобождение объекта могут быть потеряны в линиях связи. Для борьбы с этой напастью DCOM время от времени рассылает запросы по поводу созданных, но не уничтоженных объектов и если не получает адекватного ответа (либо из-за разрыва линии связи, либо из-за отказа удалённого приложения).
Один объект может реализовывать одновременно несколько интерфейсов, которые является бинарными. Бинарный интерфейс представляет собой таблицу с указателями на реализацию методов, которые является частями интерфейса. Для задания интерфейса используется специальный язык определения интерфейса – IDL (Interface Definition Language). В DCOM имеется язык MIDL (Microsoft IDL). При помощи этого языка генерируются бинарные интерфейсы стандартного формата.
Достоинство бинарных интерфейсов: они не зависят от языка программирования. При использовании другой технологии (например, CORBA) для поддержки нового языка программирования необходимо отображать описание интерфейса на языке IDL в конструкции нового языка программирования. Подобная стандартизация конструкций в случае бинарного интерфейса не нужна.
Бинарный
интерфейс
Спецификация
интерфейса на IDL
Компиляция с языка
IDL
в интерфейс
Таблица указателей
на реализацию методов
Интерфейсы, определенные для конкретного
языка программирования
Компиляция с языка
IDL
в программу на языке программирования
Компилятор языка программирования
Объявление классов
Java
Объявление классов
C++
Прототипы С
Код программы,
зависящий от компьютера
Важная особенность технологии DCOM – все объекты являются нерезидентными, т.е. как только у объекта не остается ссылающихся на него клиентов, этот объект удаляется. Наличие исключительно нерезидентных объектов делает невозможным хранение в каждом из объектов своего уникального глобального идентификатора. По этой причине объекты в DCOM могут вызываться только по указателям на интерфейсы.
Чтобы продлить жизнь объекта, когда его перестает использовать последний клиент, в DCOM применяются сохранные ссылки – моникеры (moniker или monicker: буквально – отметина для нахождения дороги). Моникер может быть сохранен на диске. Он содержит всю информацию, необходимую для воссоздания соответствующего объекта и приведение его в то состояние, которое он имел перед тем, как его перестал использовать последний клиент.
