rpcBindingBind 函数 (rpcasync.h)

RpcBindingBind 函数与 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 返回值
 

注解

RpcBindingBind 联系 RPC 服务器,并使用先前调用 RpcBindingCreate 返回的绑定句柄绑定到该服务器。 使用此方法建立的绑定句柄称为“快速”绑定句柄。

如果 pAsync 参数的值不为 NULL,则绑定将是异步的,并且可以在提供的异步状态上调用 RpcAsyncCancelCallRpcAsyncGetCallStatus 。 异步状态信息中指定的完成方法,用于向调用方指示绑定已完成。 完成通知后,可以使用新绑定的绑定句柄进行调用。

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 的另一个调用重新绑定。

如果对 RpcBindingBind 的 调用失败,则绑定句柄不会绑定到服务器,调用方可以尝试再次与对同一 API 的另一个调用绑定,或者可以释放绑定句柄。 由于失败的绑定操作不会将绑定句柄移动到绑定状态,因此不能在其上调用 RpcBindingUnbind

在绑定操作发出完成信号之前,不得调用某些函数,具体而言:

注意 目前,此函数仅支持 ncalrpc 协议序列。
 

要求

要求
最低受支持的客户端 Windows Vista、Windows XP SP2 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008、Windows Server 2003 SP1 [桌面应用 |UWP 应用]
目标平台 Windows
标头 rpcasync.h (包括 Rpc.h)
Library Rpcrt4.lib
DLL Rpcrt4.dll

另请参阅

RpcBindingCreate

RpcBindingUnbind