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


Функция 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_S_OK
RPC успешно привязан к серверу, и можно выполнять удаленные вызовы.
RPC_S_CANNOT_SUPPORT
Для этой операции привязки запрошена устаревшая функция 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 .

Некоторые функции не должны вызываться до тех пор, пока операция привязки не сообщит о завершении, в частности:

Примечание В настоящее время эта функция поддерживает только последовательность протокола ncalrpc .
 

Требования

Требование Значение
Минимальная версия клиента 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

См. также раздел

RpcBindingCreate

RpcBindingUnbind