
Распределенные системы (обзор технологии dcom)
DCOM (Distributed Component Object Model) – распределенная компонентная объектная модель. Является набором концепций и программных интерфейсов, разработанных компанией Microsoft, посредством которых клиент может запросить тот или иной сервис у серверного объекта, расположенного на другом компьютере в сети. DCOM основан на компонентной объектной модели (COM).
COM
COM (Component Object Model) – объектно-ориентированная программная модель компании Microsoft, определяющая методы взаимодействия объектов с приложением. В модели COM клиентское программное обеспечение получает доступ к объекту посредством указателя на интерфейс. Содержащего таблицу указателей на методы интерфейса.
Интерфейсы в com
Указатель на интерфейс - это указатель на указатель на массив указателей на функции интерфейса
Пример описания интерфейса на midl
[
uuid(F3792A83-69C9-11D2-AC8C-525400DDA17A),
helpstring("Этот интерфейс определяет методы работы со стеком.")
]
interface IStack : IUnknown
{
HRESULT Push([in] VARIANT Val);
HRESULT Pop([out, retval] VARIANT *pVal);
}
Каждый интерфейс имеет уникальный идентификатор IID (interface identifier)
Все объекты реализуют стандартный интерфейс IUnknown
Модель клиент-серверного взаимодействия в COM
Создание объекта в COM посредством фабрики классов
COM сервера
В СОМ существует два типа серверов:
- dll based (основанные на динамических библиотеках) – сервер реализуется в виде модуля, который может быть загружен клиентом и выполняется в адресном пространстве клиента
- exe based (основанные на выполнимых модулях) – реализуются в виде самостоятельных исполнимых модулей
Обеспечение прозрачности местоположения посредством использования заглушек
Компоненты распределенной архитектуры COM
Диспетчер управления службами
Диспетчер управления службами (Service Control Manager, SCM) обеспечивает наличие и готовность сервера к обслуживанию клиентских запросов в случае их возникновения.
Когда клиент выполняет запрос на создание определенного объекта, библиотека COM формирует запрос к локальному SCM на поиск и запуск требуемого сервера и возврат фабрики классов. После этого библиотека СОМ или клиент могут запросить создание объекта посредством фабрики классов
Для внутри процессных (in-process) серверов
SCM возвращает путь к DLL, содержащей реализацию объекта сервера. После чего СОМ библиотека загружает ее и запрашивает указатель на интерфейс фабрики классов.
Для локальных серверов
SCM запускает исполнимый модуль, содержащий объект сервера. Модуль регистрирует указатель на интерфейс фабрики классов, который возвращается библиотеке СОМ
Для удаленных серверов
Локальный SCM соединяется с SCM на соответствующем компьютере и переадресует ему запрос. Удаленный SCM запускает сервер, формирует RPC соединение, соответствующее фабрике классов сервера и возвращает его локальному SCM. Локальный SCM передает его библиотеке COM, которая формирует заместителя (proxy), передающего запросы к удаленному SCM посредством RPC.