Поделиться через


Принцип работы RPC

Средства RPC позволяют пользователям показаться, что клиент напрямую вызывает процедуру, расположенную в удаленной серверной программе. Каждый клиент и сервер имеют собственные адресные пространства; то есть каждый из них имеет собственный ресурс памяти, выделенный для данных, используемых процедурой. На следующем рисунке показана архитектура RPC.

Архитектура rpc

Как показано на рисунке, клиентское приложение вызывает локальную процедуру-заглушку вместо фактического кода, реализующего процедуру. Заглушки компилируются и связываются с клиентским приложением. Вместо фактического кода, реализующего удаленную процедуру, код клиентской заглушки:

  • Извлекает необходимые параметры из адресного пространства клиента.
  • Преобразует параметры по мере необходимости в стандартный формат NDR для передачи по сети.
  • Вызывает функции в библиотеке времени выполнения клиента RPC для отправки запроса и его параметров на сервер.

Сервер выполняет следующие действия для вызова удаленной процедуры.

  1. Функции библиотеки времени выполнения RPC сервера принимают запрос и вызывают процедуру серверной заглушки.
  2. Заглушка сервера извлекает параметры из сетевого буфера и преобразует их из формата сетевой передачи в формат, необходимый серверу.
  3. Заглушка сервера вызывает фактическую процедуру на сервере.

Затем выполняется удаленная процедура, которая, возможно, создает выходные параметры и возвращаемое значение. После завершения удаленной процедуры аналогичная последовательность шагов возвращает данные клиенту.

  1. Удаленная процедура возвращает свои данные в заглушку сервера.
  2. Заглушка сервера преобразует выходные параметры в формат, необходимый для передачи по сети, и возвращает их в функции библиотеки времени выполнения RPC.
  3. Функции библиотеки времени выполнения RPC сервера передают данные в сети на клиентский компьютер.

Клиент завершает процесс, принимая данные по сети и возвращая их вызывающей функции.

  1. Клиентская библиотека времени выполнения RPC получает возвращаемые значения удаленной процедуры и возвращает их в заглушку клиента.
  2. Клиентская заглушка преобразует данные из своего NDR в формат, используемый клиентским компьютером. Заглушка записывает данные в память клиента и возвращает результат вызывающей программе на клиенте.
  3. Вызывающая процедура продолжается так, как если бы она была вызвана на том же компьютере.

Библиотеки времени выполнения предоставляются в двух частях: библиотека импорта, связанная с приложением, и библиотека времени выполнения RPC, реализованная в виде библиотеки динамической компоновки (DLL).

Серверное приложение содержит вызовы функций библиотеки времени выполнения сервера, которые регистрируют интерфейс сервера и позволяют серверу принимать удаленные вызовы процедур. Серверное приложение также содержит удаленные процедуры для конкретного приложения, которые вызываются клиентскими приложениями.