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


Указание последовательностей протоколов

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

Серверная программа может разрешить клиентам подключаться с помощью любой последовательности протокола, которую поддерживает сеть. Для этого вызовите 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. Широковещательная трансляция позволяет клиенту выдавать сообщения на несколько серверов одновременно. Это позволяет клиенту находить один из нескольких доступных серверов в сети или управлять несколькими серверами одновременно. Обратите внимание, что широковещательная передача датаграммы действительна только в пределах локального канала и обычно не пересекает маршрутизаторы. Широковещательные вызовы неявно идемпотентны. Если вызов содержит параметры [out], возвращается только первый ответ сервера. После ответа сервера все будущие RPC через этот дескриптор привязки будут отправляться только на этот сервер, включая вызовы с широковещательным атрибутом. Чтобы отправить другую широковещательную передачу, создайте новый дескриптор привязки или вызовите RpcBindingReset для существующего дескриптора.
  • RPC датаграммы поддерживает атрибут может быть IDL. Это позволяет клиенту отправлять вызов серверу, не дожидаясь ответа или подтверждения. Вызов не может содержать параметры [out]. Вызовы, использующие [возможно] , неявно идемпотентны.