Принцип работы RPC
Средства RPC позволяют пользователям показаться, что клиент напрямую вызывает процедуру, расположенную в удаленной серверной программе. Каждый клиент и сервер имеют собственные адресные пространства; то есть каждый из них имеет собственный ресурс памяти, выделенный для данных, используемых процедурой. На следующем рисунке показана архитектура RPC.
Как показано на рисунке, клиентское приложение вызывает локальную процедуру-заглушку вместо фактического кода, реализующего процедуру. Заглушки компилируются и связываются с клиентским приложением. Вместо фактического кода, реализующего удаленную процедуру, код клиентской заглушки:
- Извлекает необходимые параметры из адресного пространства клиента.
- Преобразует параметры по мере необходимости в стандартный формат NDR для передачи по сети.
- Вызывает функции в библиотеке времени выполнения клиента RPC для отправки запроса и его параметров на сервер.
Сервер выполняет следующие действия для вызова удаленной процедуры.
- Функции библиотеки времени выполнения RPC сервера принимают запрос и вызывают процедуру серверной заглушки.
- Заглушка сервера извлекает параметры из сетевого буфера и преобразует их из формата сетевой передачи в формат, необходимый серверу.
- Заглушка сервера вызывает фактическую процедуру на сервере.
Затем выполняется удаленная процедура, которая, возможно, создает выходные параметры и возвращаемое значение. После завершения удаленной процедуры аналогичная последовательность шагов возвращает данные клиенту.
- Удаленная процедура возвращает свои данные в заглушку сервера.
- Заглушка сервера преобразует выходные параметры в формат, необходимый для передачи по сети, и возвращает их в функции библиотеки времени выполнения RPC.
- Функции библиотеки времени выполнения RPC сервера передают данные в сети на клиентский компьютер.
Клиент завершает процесс, принимая данные по сети и возвращая их вызывающей функции.
- Клиентская библиотека времени выполнения RPC получает возвращаемые значения удаленной процедуры и возвращает их в заглушку клиента.
- Клиентская заглушка преобразует данные из своего NDR в формат, используемый клиентским компьютером. Заглушка записывает данные в память клиента и возвращает результат вызывающей программе на клиенте.
- Вызывающая процедура продолжается так, как если бы она была вызвана на том же компьютере.
Библиотеки времени выполнения предоставляются в двух частях: библиотека импорта, связанная с приложением, и библиотека времени выполнения RPC, реализованная в виде библиотеки динамической компоновки (DLL).
Серверное приложение содержит вызовы функций библиотеки времени выполнения сервера, которые регистрируют интерфейс сервера и позволяют серверу принимать удаленные вызовы процедур. Серверное приложение также содержит удаленные процедуры для конкретного приложения, которые вызываются клиентскими приложениями.