Шаг 151.
Среда программирования Visual C++.
Архитектура СОМ. Маршалинг. Контексты исполнения компонентов

    На этом шаге мы перечислим контексты исполнения серверов.

    СОМ-серверы не обязательно загружаются в процесс клиента, пользющегося их услугами. Клиент и сервер могут даже находиться на одной машине, и это влияет на способ обмена данными между ними. Вам придется позаботиться о том, чтобы сервер "понимал" формат данных, приходящих от его клиента, независимо от места и платформы, на которой выполняется сервер.

    Передача данных через границы процесса называется маршалингом (marshaling). Из этого и следующих шагов Вы узнаете о способах маршалинга - о том, как СОМ-компоненты передают и получают данные методов предоставляемых ими интерфейсов.

    СОМ-компонент выполняет одну из трех ролей:

    На рисунке 1 показаны их характеристики и способы реализации.


Рис.1. Контексты исполнения СОМ-объектов

    Сервер, встраиваемый в процесс, реализуется в виде DLL и выполняется в адресном пространстве того же процесса, что и клиент. Такой СОМ-сервер более оперативно реагирует на запросы по сравнению с внешним или удаленным сервером. Да и времени на их разработку требуется меньше - приходится писать меньше кода. Однако, применяя этот тип сервера, Вы должны зарегистрировать копию СОМ-объекта на каждом компьютере, где предполагается выполнять клиентское приложение.

    Внешние СОМ-серверы реализуются как ЕХЕ-файлы, находящиеся на том же компьютере, что и клиентское приложение, но выполняющиеся в адресном пространстве другого процесса. В этом случае данные приходится передавать через границы процесса, то есть прибегать к маршалингу. Для этого потребуется написать дополнительный код, и СОМ-объект будет немного медленнее обрабатывать запросы метода. Так как СОМ-объект работает на том же компьютере, что и клиентское приложение, его нужно скопировать и зарегистрировать на каждой клиентской машине.

    Внешний СОМ-объект можно реализовать так, что он будет выполняться на другой машине. Такой объект называется удаленным сервером (remote server). В этом случае обмен данными между серверным и клиентским компьютерами происходит по сети. Характерное время отклика на запросы методов у такого сервера существенно больше, причем этот показатель может быть нестабильным: время запуска метода (даже если это один и тот же метод) значительно варьируется. В перегруженной сети клиентское приложение будет ждать ответа дольше. Код, создаваемый для маршалинга параметров метода в локальный сервер, вполне годится для их передачи и на удаленный сервер. В случае применения удаленного сервера достаточно иметь всего лишь один его экземпляр, загруженный и зарегистрированный на серверной машине. Он сможет обслужить всех клиентов, нуждающихся в его методах. Наличие только одного сервера существенно облегчает и упрощает процесс его модификации (например, изменение методов).

    На следующем шаге мы рассмотрим технологии маршалинга.




Предыдущий шаг Содержание Следующий шаг