播发服务器接口
使用自动句柄的应用程序的服务器端必须调用函数 RpcNsBindingExport ,以使有关服务器的绑定信息可供客户端使用。 自动绑定句柄要求在客户端可访问的服务器上运行名称服务。 名称服务的 Microsoft 实现 Microsoft 定位符管理自动句柄。 使用隐式和显式绑定句柄的服务器应用程序还可以在名称服务数据库中播发其存在。
通常,服务器调用以下运行时函数:
/* auto handle server application (fragment) */
//interface header file that the MIDL compiler generates
#include "auto.h"
void main(void)
{
RpcUseProtseqEp(...);
RpcServerRegisterIf(...);
RpcServerInqBindings(...);
RpcNsBindingExport(...);
...
}
对此代码片段中前两个函数的调用类似于 Hello, World 示例。 这些函数使有关绑定的信息可供客户端使用。 对 RpcServerInqBindings 和 RpcNsBindingExport 的调用会将信息放入名称服务数据库中。 调用 RpcServerInqBindings 会用有效的绑定句柄填充绑定向量,然后再将句柄导出到名称服务。 服务器程序将句柄导出到数据库后,客户端 (或客户端存根) 可以调用 RpcNsBindingImportBegin 和 RpcNsBindingImportNext 来获取此信息。 有关详细信息,请参阅 查找服务器主机系统。
对 RpcServerInqBindings 和 RpcNsBindingExport 的调用及其关联的数据结构如下所示:
RPC_BINDING_VECTOR * pBindingVector;
RPCSTATUS status;
status = RpcServerInqBindings(&pBindingVector);
status = RpcNsBindingExport(
fNameSyntaxType, // name syntax type
pszAutoEntryName, // nsi entry name
autoh_ServerIfHandle, // if server handle
pBindingVector, // set in previous call
NULL); // UUID vector
请注意, RpcServerInqBindings 参数 pBindingVector 是指向 RPC_BINDING_VECTOR指针的指针。 另请记住,每次调用 RpcNsBindingExport 后都必须调用 RpcBindingVectorFree。
若要从名称服务数据库中删除导出的接口,服务器将调用 RpcNsBindingUnexport ,如下所示:
status = RpcNsBindingUnexport(
fNameSyntaxType,
pszAutoEntryName,
auto_ServerIfHandle,
NULL); // unexport handles only
仅当服务被永久删除时,才应使用 RpcNsBindingUnexport 函数。 暂时禁用服务时(例如关闭服务器进行维护时),不应使用该服务。 服务器程序可以将自身注册到名称服务数据库,但由于服务器暂时处于脱机状态,因此不可用。 客户端应用程序应包含此类条件的异常处理代码。
有关名称服务数据库的内容和格式的详细信息,请参阅 RPC 名称服务数据库。
如果客户端和服务器程序都在 Windows 2000 下运行,则应用程序可以利用 Active Directory 服务。 运行客户端和服务器程序的计算机必须都是 Windows 2000 域的成员。
若要使用 Active Directory 服务播发其状态,服务器程序应在域管理员的安全上下文中运行。 如果它在域用户的上下文中运行,则域管理员必须修改 RPC 服务容器上的 ACL) (访问控制列表。 有关详细信息,请参阅 Active Directory 文档。