隐式绑定句柄
隐式绑定句柄允许应用程序选择特定服务器来执行其远程过程调用。 有关详细信息,请参阅 客户端绑定。 它们还使客户端/服务器程序能够使用经过身份验证的绑定。 也就是说,客户端可以在隐式绑定句柄中指定身份验证信息。 RPC 运行时库使用身份验证信息在客户端和服务器之间建立经过身份验证的 RPC 会话。 有关详细信息,请参阅安全性。
注意
隐式绑定句柄不是线程安全的。 因此,多线程应用程序应避免使用隐式绑定句柄。
当应用程序使用隐式绑定时,客户端必须设置绑定信息,以便它可以创建绑定。 客户端创建隐式绑定后,无需将任何绑定句柄传递给远程过程。 RPC 库处理通信会话的其余机制。
客户端将隐式句柄的绑定信息存储在全局变量中。 当 MIDL 编译器从 MIDL 文件中的接口规范生成客户端存根和头文件时,它还会生成全局绑定句柄变量的代码。 客户端程序初始化句柄,然后在销毁绑定之前不再引用它。
通过在 ACF 中为接口指定 [implicit_handle] 属性来创建隐式句柄,如下所示:
/* ACF file (complete) */
[
implicit_handle(handle_t hHello)
]
interface hello
{
}
handle_t类型(在前面的示例中使用)是用于定义绑定句柄的 MIDL 数据类型。
创建隐式句柄后,应用程序需要将其用作 RPC 运行时库函数的参数。 不要使用隐式句柄作为远程过程调用的参数。 下面的代码示例演示如何使用隐式绑定句柄。
RPC_STATUS status;
status = RpcBindingFromStringBinding(
pszStringBinding,
&hHello);
status = MyRemoteProcedure();
status = RpcBindingFree(hHello);
...
在前面的示例中,RPC 运行时库函数 RpcBindingFromStringBinding 和 RpcBindingFree 都要求在其参数列表中传递隐式绑定句柄。 但是,远程过程 MyRemoteProcedure 没有,因为它不是 RPC 运行时库函数。