Использование HTTP в качестве транспорта RPC
RPC-over-HTTP позволяет клиентским программам использовать Интернет для выполнения процедур, предоставляемых серверными программами в удаленных сетях. RPC через HTTP туннелирует свои вызовы через установленный порт HTTP. Таким образом, его вызовы могут пересекать сетевые брандмауэры в клиентских и серверных сетях.
RPC через HTTP направляет свои вызовы к прокси-серверу RPC, расположенному в сети RPC-сервера. Прокси-сервер RPC устанавливает и поддерживает подключение к серверу RPC. Он служит прокси-сервером, отправляя удаленные вызовы процедур на RPC-сервер и отправляя ответы сервера обратно через Интернет в клиентское приложение. Этот процесс показан на следующей схеме.
На схеме показан брандмауэр в сети клиентского приложения. Это не требуется для работы RPC через HTTP. Однако если в клиентской сети есть брандмауэр, ей также потребуется программа прокси-сервера, например Прокси-сервер Майкрософт.
Когда клиентская программа выполняет удаленный вызов процедуры с использованием HTTP в качестве транспорта, библиотека времени выполнения RPC на клиенте связывается с прокси-сервером RPC. В зависимости от того, было ли предложено клиенту RPC использовать HTTP или HTTPS (HTTPs с SSL) порт 80 или порт 443 соответственно. Прокси-сервер RPC связывается с программой RPC-сервера и устанавливает tcp/IP-подключение. Клиент и прокси-сервер RPC поддерживают подключение по протоколу HTTP или HTTPS через Интернет. Http- или HTTPS-подключение клиента к прокси-серверу RPC может проходить через брандмауэр (при условии наличия соответствующих разрешений доступа). Затем сервер может выполнить удаленный вызов процедуры и использовать подключение через прокси-сервер RPC для ответа клиенту. Прокси-сервер RPC — это расширение ISAPI, работающее в контексте IIS.
Если клиент или сервер по какой-либо причине отключается, прокси-сервер RPC обнаружит их и завершит сеанс RPC. Пока сеанс продолжается, прокси-сервер RPC будет поддерживать подключения к клиенту и серверу. Он перенаправит удаленные вызовы процедур с клиента на сервер и отправляет ответы с сервера клиенту.
Клиентская программа RPC может туннелирование вызовов RPC через Интернет путем создания строковой привязки в формате :
[object_uuid@]ncacn_http:rpc_server[endpoint,HttpProxy=proxy_server:http_port,RpcProxy=rpc_proxy:rpc_port,HttpConnectionOption=UseHttpProxy]
Где:
object_uuid указывает UUID объекта RPC. Дополнительные сведения см. в разделах Создание идентификаторов UUID интерфейса и Строковый UUID.
ncacn_http выбирает спецификацию последовательности протоколов для RPC через HTTP. Дополнительные сведения см. в разделах Константы последовательности протокола и привязка строк.
rpc_server — это сетевой адрес компьютера, на который выполняется процесс RPC-сервера. Адрес сервера должен быть указан в форме, видимой и понятной прокси-компьютеру RPC, а не клиенту. Так как клиент не подключается напрямую к серверу, ему не нужно разрешать имя сервера или устанавливать к нему подключение. Прокси-сервер RPC установит подключение от имени клиента, поэтому rpc_server должно быть именем, распознаваемым прокси-сервером RPC.
конечная точка указывает порт TCP/IP, который серверный процесс RPC прослушивает для удаленных вызовов процедур. Дополнительные сведения см. в разделе Поиск конечных точек.
HttpProxy при необходимости указывает прокси-сервер HTTP в сети клиента RPC, например прокси-сервер Майкрософт. Если выбран прокси-сервер, номер порта не указан, заглушка RPC по умолчанию использует порт 80, если SSL не запрашивается, и порт 443, если указан SSL.
RpcProxy указывает адрес и номер порта компьютера IIS, который выступает в качестве прокси-сервера RPC. Это необходимо указать, только если процесс сервера RPC находится на компьютере, отличном от прокси-сервера RPC. Если номер порта не указан, заглушка клиента RPC по умолчанию использует порт 80, если SSL не указан, и использует порт 443, если указан ПРОТОКОЛ SSL (HTTPS).
При необходимости HttpConnectionOption позволяет направлять поведение RPC при создании HTTP-подключений. Значение UseHttpProxy указывает RPC маршрутизировать свой трафик через прокси-сервер HTTP в любое время, в том числе, если для клиента задано internet Обозреватель значение "Обход прокси-сервера для локальных адресов".
Этот параметр поддерживается в Windows 7, Windows Server 2008 R2, Windows 8.1 и Windows Server 2012 R2 с установленным обновлением KB2916915. Этот параметр не поддерживается в Windows 8 и Windows Server 2012. Приложения могут определить, поддерживается ли этот параметр средой выполнения RPC, проверив значение реестра ConnectionOptionsFlag в следующем разделе реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc
Если задан бит 0 (LSB) этого значения реестра, этот параметр поддерживается; В противном случае этот параметр не поддерживается средой выполнения RPC в системе.
Дополнительные сведения о создании строковых привязок см. в разделе Привязка и дескрипторы.
Серверная программа RPC может принимать туннелированные вызовы RPC путем прослушивания последовательности протокола ncacn_http.
Корпорация Майкрософт имеет две основные реализации RPC через HTTP: версия 1 и версия 2.
Версия 1 (RPC через HTTP версии 1) поддерживается в Windows XP. Версия 1 прокси-сервера RPC поддерживается в Windows 2000.
Версия 2 (RPC через HTTP версии 2) — это текущая версия.
Две версии имеют разные возможности и ограниченные возможности взаимодействия. Здесь приведена сводка различий. Рекомендации по взаимодействию см. в статье Требования к системе и взаимодействие для RPC через HTTP.
- RPC через HTTP версии 1 требует включения туннелирования SSL на всех прокси-серверах и брандмауэрах HTTP между клиентом RPC через HTTP и прокси-сервером RPC. RPC через HTTP версии 1 пытается создать туннель SSL через порт 80, несмотря на то, что передаваемые данные фактически не зашифрованы с помощью SSL. Прокси-серверы и брандмауэры обычно отклоняют такие запросы, если они не настроены явным образом. RPC через HTTP версии 2 не имеет такого требования.
- RPC через HTTP версии 1 не может установить сеанс SSL для прокси-сервера RPC. RPC через HTTP версии 2 может отправлять весь трафик RPC через HTTP в сеансе SSL; По умолчанию версия 2 требует отправки данных в рамках сеанса SSL.
- RPC через HTTP версии 1 не может пройти проверку подлинности на прокси-сервере RPC. RPC через HTTP версии 2 может пройти проверку подлинности; По умолчанию версии 2 требуется проверка подлинности на прокси-сервере RPC.
- Прокси-сервер RPC версии 1 работает неправильно, если компьютер IIS, на котором он установлен, является частью веб-фермы. Прокси-сервер RPC версии 2 работает правильно, если компьютер IIS, на котором он установлен, является частью веб-фермы.
Примечание
Если на компьютере клиентской программы установлена Обозреватель Microsoft Internet, а клиент не указывает HttpProxy в строковой привязке, заглушка клиента RPC будет выполнять поиск записи HttpProxy в реестре на клиентском компьютере. Если он найден, он будет использовать прокси-сервер, указанный в записи реестра.
Предположим, например, что клиентской программе необходимо подключиться через Интернет к RPC-серверу на компьютере с именем Server7.microsoft.com. Кроме того, предположим, что прокси-сервер RPC выполняется на Major7.microsoft.com. Серверная программа RPC прослушивает порт 2225. Клиент будет использовать строковую привязку:
ncacn_http:Server7.microsoft.com[2225, RpcProxy=Major7.microsoft.com]
Если прокси-сервер RPC может разрешить имя сервера как Server7, не требуя полного доменного имени, можно также указать:
ncacn_http:Server7 [2225, RpcProxy=Major7.microsoft.com]
Если в клиентской сети используется брандмауэр и прокси-сервер Интернета с именем myproxy, а Обозреватель Интернета на клиенте не настроен для использования этого прокси-сервера, необходимо изменить привязку строки клиента следующим образом:
ncacn_http:Server7.microsoft.com[,HttpProxy=myproxy:80,RpcProxy=Major7.microsoft.com:80]
Это позволяет клиенту подключиться к серверной программе RPC на Server7.microsoft.com. Для этого клиент сначала использует порт 80 (или порт 443, если используется SSL) для подключения к myproxy. Это предоставит клиентской программе доступ к Интернету. Используя Интернет, клиентская программа затем подключается к прокси-серверу RPC на Major7.microsoft.com. Прокси-сервер RPC установит подключение к серверной программе RPC, работающей на Server7.microsoft.com.
Если в клиентской сети используется брандмауэр, а прокси-сервер RPC недоступен напрямую, чтобы быстрее установить подключение, привязку строки клиента можно изменить следующим образом:
ncacn_http:Server7.microsoft.com[RpcProxy=Major7.microsoft.com:80,HttpConnectionOption=UseHttpProxy]
HttpConnectionOption позволяет направлять поведение RPC при создании HTTP-подключений. Значение UseHttpProxy указывает RPC маршрутизировать свой трафик через прокси-сервер HTTP в любое время, в том числе, если для клиента задано internet Обозреватель значение "Обход прокси-сервера для локальных адресов". Это позволяет клиенту принудительно подключиться к прокси-серверу RPC через прокси-сервер HTTP. Это ускоряет время установки подключения, так как оно обходит задержку поиска RPC-сервера непосредственно перед использованием прокси-сервера HTTP.
Если используется параметр HttpConnectionOption и Обозреватель Интернета на клиенте не настроен для использования этого прокси-сервера HTTP, подключения могут завершиться сбоем с RPC_S_INVALID_NETWORK_OPTIONS.
Сегодня подавляющее большинство компьютеров настроено для просмотра веб-страниц. Поэтому большинству клиентов не нужно указывать HttpProxy, так как он будет получен из параметров подключения к Интернету.