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


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

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

архитектура RPC

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

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

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

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

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

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

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

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

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

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