Указание последовательностей протоколов
Серверные приложения должны выбирать одну или несколько последовательностей протоколов, используемых при взаимодействии с клиентом по сети. Выбор последовательностей протоколов зависит от сети. См. о интерпретации сведений о привязке и о выборе последовательности протоколов.
Серверная программа может разрешить клиентам подключаться с помощью любой последовательности протоколов, которую поддерживает сеть. Для этого вызовите RpcServerUseAllProtseqs и передайте RPC_C_PROTSEQ_MAX_REQS_DEFAULT в качестве первого параметра. Однако это не рекомендуемый подход. Скорее, использование ncalrpc для локальных вызовов и ncacn_ip_tcp или ncacn_http для удаленных вызовов обычно достаточно. Разнородные сети являются редкими, и практически все сети поддерживают TCP/IP.
Если вы хотите, чтобы клиент ограничивал выделение портов для динамических конечных точек определенным диапазоном портов, вызовите RpcServerUseAllProtseqsEx. Эта функция связана с Microsoft RPC и очень полезна для удаленных вызовов процедур, проходящих через брандмауэр. Он использует дополнительный параметр для передачи функции флагов управления выделением портов. См. Настройка реестра для распределения портов и избирательного связывания.
При разработке интерфейсов сервера можно указать последовательности протоколов и сведения о конечной точке в файле MIDL. При этом сервер должен использовать RpcServerUseAllProtseqsIf для регистрации всех последовательностей протоколов и связанных сведений о конечной точке, предоставленных в файле IDL. Кроме того, существует соответствующая функция RpcServerUseAllProtseqsIfEx , которая также позволяет серверу передавать флаги управления распределением портов.
Если вы хотите настроить клиентские и серверные программы для взаимодействия с указанной последовательностью протоколов, серверное приложение должно вызывать RpcServerUseProtseq. Полный список последовательностей протоколов Microsoft RPC см. в разделе константы последовательности протоколов.
Microsoft RPC также предоставляет RpcServerUseProtseqEx, чтобы разрешить приложениям выбирать определенные последовательности протоколов и управлять динамическим распределением портов.
Помимо протоколов, ориентированных на подключение, Microsoft RPC также поддерживает протоколы диаграммы данных (без подключения). Рекомендуется использовать протоколы, ориентированные на подключение; Протоколы диаграммы данных имеют разные наборы функций, отличные от протоколов, ориентированных на подключение, и следует использовать только в том случае, если для разработчика распределенной системы требуется функция, доступная только в протоколах диаграммы данных. Ниже перечислены некоторые функции, доступные при использовании протоколов диаграммы данных:
- Диаграммы данных поддерживают протоколы транспорта без подключения UDP и IPX.
- Так как не требуется устанавливать и поддерживать подключение, протокол RPC для диаграммы данных требует меньше затрат на ресурсы.
- Диаграммы данных позволяют ускорить привязку.
- Как и в случае с RPC, ориентированными на подключение, вызовы RPC по умолчанию неidempotent. Это означает, что вызов гарантированно не будет выполнен более одного раза. Однако функция может быть помечена как идемпотентная в файле IDL, указывающая RPC, что она безвредна для выполнения функции несколько раз в ответ на один клиентский запрос. Это позволяет времени выполнения программы поддерживать меньше информационного состояния на сервере. Обратите внимание, что идемпотентный вызов будет повторно выполнен только в редких обстоятельствах в нестабильной сети.
- Datagram RPC поддерживает IDL атрибут широковещательной передачи. Широковещательная передача позволяет клиенту одновременно выдавать сообщения нескольким серверам. Это позволяет клиенту находить один из нескольких доступных серверов в сети или управлять несколькими серверами одновременно. Обратите внимание, что трансляция диаграммы данных допустима только в пределах локальной связи и обычно не пересекает маршрутизаторы. Широковещательные вызовы неявно идемпотентны. Если вызов содержит параметры [вне], возвращается только первый ответ сервера. После ответа сервера все будущие RPCs по этой дескриптору привязки будут отправляться только на этот сервер, включая вызовы с атрибутом трансляции. Чтобы отправить другую трансляцию, создайте новый дескриптор привязки или вызовите RpcBindingReset на существующем дескрипторе.
- Датаграммный RPC поддерживает атрибут IDL возможно или. Это позволяет клиенту отправлять вызов на сервер, не ожидая ответа или подтверждения. Вызов не может содержать параметры [за пределами]. Вызовы, использующие , возможно, включая, являются неявно идемпотентными.