 
        
        Распределенные системы (обзор технологии 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. 
