Шаг 155.
Среда программирования Visual C++.
Архитектура СОМ. Маршалинг. Специальный маршалинг
На этом шаге мы рассмотрим специальный маршалинг.
В некоторых приложениях стандартный маршалинг не работает. В этом случае объект сервера может поддерживать
специальный маршалинг.
Для этого в своем сервере Вам придется реализовать интерфейс IMarshal. Использование специального
маршалинга исключает стандартный маршалинг. При этом СОМ требует, чтобы сервер самостоятельно
формировал пакет с данными для маршалинга и передавал его в контекст клиента. СОМ создает экземпляр
указанного объектом обработчика, который получает пакет и действует в качестве интеллектуального представителя
клиента, проводя для него демаршалинг.
При этом взаимодействие через границы процесса происходит так же, как и в стандартном маршалинге.
Клиент не заметит, что в данном случае применен специальный (или любой другой) маршалинг В общем случае
маршалинг не создает проблем разработчикам СОМ-объектов. MIDL генерирует соответствующий
код для стандартных СОМ-интерфейсов, а маршалер Automation обслуживает объекты с
диспетчерскими интерфейсами. Однако в некоторых случаях появляется достаточно причин для поддержки в
объекте специального маршалинга. Вот некоторые из них.
- Разделяемая память. В стандартном маршалинге данные всегда переносятся через границы между
клиентом и сервером. Прибегнув к специальному маршалингу, Вы сможете выделить область разделяемой памяти,
доступной как из клиента, так и из сервера, и пользоваться ею для передачи данных. Это позволит избежать
излишнего копирования данных и повысить производительность.
- Маршалинг по значению. В отличие от маршалинга по ссылке, этот тип маршалинга позволяет
делать локальные копии объектов, так что все последующие запросы выполняются локально.
- "Интеллектуальный" представитель. В зависимости от состояния внутреннего кэша представитель
может самостоятельно принимать решение о необходимости обращения к удаленному серверу. Некоторые методы он
выполняет самостоятельно в обход сервера. "Интеллектуальный" представитель также способен повысить производительность,
обеспечивая поддержку асинхронных запросов. Для обработки запроса он, например, создает отдельный поток,
который отошлет запрос и возвратит управление, как только сервер начнет его обрабатывать.
- Выход за рамки стандартных потоковых моделей СОМ. Это npoисходит, когда Вам становятся
тесными рамки стандартной потоковой модели.
Со следующего шага мы начнем рассматривать диспетчерские интерфейсы.
Предыдущий шаг
Содержание
Следующий шаг