Proxy (Прокси)
Прокси-сервер находится в адресном пространстве вызывающего процесса и выступает в качестве суррогата для удаленного объекта. С точки зрения вызывающего объекта прокси является объектом. Как правило, роль прокси-сервера заключается в том, чтобы упаковать параметры интерфейса для вызовов методов в его интерфейсах объектов. Прокси-сервер упаковывает параметры в буфер сообщений и передает буфер в канал, который обрабатывает транспорт между процессами. Прокси-сервер реализуется как агрегат или составной объект. Он содержит системный элемент диспетчера, называемый диспетчером прокси-сервера и одним или несколькими компонентами, которые называются прокси-серверами интерфейса. Число прокси-серверов интерфейса равно количеству интерфейсных интерфейсов, которые были предоставлены конкретному клиенту. Чтобы клиент соответствовал объектной модели компонента, прокси-сервер, как представляется, является реальным объектом.
Примечание
С помощью пользовательского маршалинга прокси-сервер можно реализовать аналогично или напрямую взаимодействовать с объектом без использования заглушки.
Каждый прокси интерфейса — это объект компонента, реализующий код маршалинга для одного из интерфейсов объекта. Прокси-сервер представляет объект, для которого он предоставляет код маршалинга. Каждый прокси-сервер также реализует интерфейс IRpcProxyBuffer. Хотя интерфейс объекта, представленный прокси-сервером, является общедоступным, реализация IRpcProxyBuffer является частной и используется внутри прокси-сервера. Диспетчер прокси-сервера отслеживает прокси-серверы интерфейса, а также содержит общедоступную реализацию управляемого интерфейса IUnknown для агрегата. Каждый прокси-сервер интерфейса может существовать в отдельной библиотеке DLL, загруженной при материализации интерфейса, который он поддерживает для клиента.
На следующей схеме показана структура прокси-сервера, поддерживающая стандартное маршалинг параметров, принадлежащих двум интерфейсам: IA1 и IA2. Каждый прокси-сервер интерфейса реализует IRpcProxyBuffer для внутреннего взаимодействия между агрегатными частями. Когда прокси-сервер готов передать маршалированные параметры через границу процесса, он вызывает методы в интерфейсе IRpcChannelBuffer , который реализуется каналом. Канал в свою очередь перенаправит вызов библиотеки времени выполнения RPC, чтобы он смог достичь назначения в объекте.