Функция RpcBindingBindd (rpcasync.h)
Функция RpcBindingBindd связывается с RPC-сервером и привязывается к нему.
Синтаксис
RPC_STATUS RpcBindingBind(
[in, optional] PRPC_ASYNC_STATE pAsync,
[in] RPC_BINDING_HANDLE Binding,
[in] RPC_IF_HANDLE IfSpec
);
Параметры
[in, optional] pAsync
Указатель на структуру RPC_ASYNC_STATE , содержащую сведения об асинхронных вызовах. Эта информация о состоянии содержит метод завершения, используемый для обозначения завершения операции привязки.
[in] Binding
RPC_BINDING_HANDLE структуры, содержащей дескриптор привязки, созданный при предыдущем вызове RpcBindingCreate.
[in] IfSpec
RPC_IF_HANDLE значение, указывающее интерфейс, в котором будут выполняться вызовы для этого дескриптора привязки.
Возвращаемое значение
Эта функция возвращает RPC_S_OK при успешном выполнении; в противном случае возвращается код ошибки RPC_S_*. Сведения об этих кодах ошибок см. в разделе Возвращаемые значения RPC.
Код возврата | Описание |
---|---|
|
RPC успешно привязан к серверу, и можно выполнять удаленные вызовы. |
|
Для этой операции привязки запрошена устаревшая функция RPC. |
Комментарии
RpcBindingBindd связывается с RPC-сервером и привязывается к нему с помощью дескриптора привязки, возвращенного предыдущим вызовом RpcBindingCreate. Дескрипторы привязки, созданные с помощью этого метода, называются "быстрыми" дескрипторами привязки.
Если значение параметра pAsync не равно NULL, привязка будет асинхронной и вызовы RpcAsyncCancelCall и RpcAsyncGetCallStatus могут выполняться в предоставленном асинхронном состоянии. Метод завершения, указанный в сведениях об асинхронном состоянии, используется для обозначения вызывающей стороны о завершении привязки. После уведомления о завершении вызовы можно выполнять с помощью нового дескриптора привязки.
Метод bind не определяет, какие вызовы можно выполнять с помощью дескриптора привязки. Если привязка является синхронной, асинхронные вызовы по-прежнему можно выполнять с дескриптором привязки и наоборот. Метод bind определяет способ уведомления об успешной привязке, особенно в случае асинхронных привязок.
Так как этот API обменивается сообщениями с RPC-сервером, операции привязки могут занять много времени на основе ряда независимых факторов, включая сетевой трафик и блокировку сервера. Если привязка является синхронной, операция привязки может блокироваться, если сервер заблокирован.
После завершения привязки семантика вызовов, выполненных в дескрипторе привязки, аналогична вызовам любого другого типа дескриптора привязки, но с четырьмя заметными отличиями, перечисленными ниже:
- Все вызовы этого дескриптора привязки должны выполняться в интерфейсе, указанном в IfSpec. Дескриптор привязки однозначно привязан к этому интерфейсу. Сам интерфейс можно выгрузить до того, как дескриптор привязки будет уничтожен, но обширные сведения об интерфейсе кэшируются в дескрипторе привязки, и если вызов выполняется с тем же дескриптором привязки для другого интерфейса, результаты не определены.
- Обратные вызовы RPC не допускаются для дескриптора привязки. Если RPC-сервер пытается выполнить обратный вызов с помощью метода с атрибутом [callback], вызов отклоняется с кодом состояния ошибки RPC_S_CANNOT_SUPPORT.
- При использовании классических дескрипторов привязки RPC попытается прозрачно повторно подключиться к серверу, если подключение будет прервано. Для быстрых дескрипторов привязки RPC не будет пытаться прозрачно повторно подключиться к серверу; Вместо этого он вернет одну из следующих ошибок: RPC_S_SERVER_UNAVAILABLE, RPC_S_CALL_FAILED и RPC_C_CALL_FAILED_DNE. Если подключение разорвано из-за отклоненных учетных данных, возвращается RPC_S_ACCESS_DENIED; и если сервер сталкивается с временной ошибкой из-за нехватки памяти, возвращается RPC_S_OUT_OF_MEMORY. Любые другие ошибки подключения являются результатом ошибок маршалинга или отмены маршалинга, возвращаемых подпрограммами сервера. В случае потери соединения вызываемый объект должен отменить привязку, вызвав RpcBindingUnbind, а затем повторно привязав его с другим вызовом RpcBindingBind.
Если вызов RpcBindingBindd завершается сбоем, то дескриптор привязки не привязывается к серверу, и вызывающий объект может повторить попытку привязки с помощью другого вызова того же API или освободить дескриптор привязки. Так как неудачная операция привязки не перемещает дескриптор привязки в привязанное состояние, для него не следует вызывать RpcBindingUnbind .
Некоторые функции не должны вызываться до тех пор, пока операция привязки не сообщит о завершении, в частности:
- RpcBindingFree
- RpcBindingReset
- RpcBindingSetAuthInfo и RpcBindingSetAuthInfoEx
- RpcBindingSetObject
- RpcBindingSetOption
- RpcMgmtSetComTimeout
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista, Windows XP с пакетом обновления 2 (SP2) [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008, Windows Server 2003 с пакетом обновления 1 (SP1) [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | rpcasync.h (включая Rpc.h) |
Библиотека | Rpcrt4.lib |
DLL | Rpcrt4.dll |