RPC总结
Server:
1. 注册接口
注册一个服务程序所支持的接口是为了使客户程序能够找到服务程序在那个服务器诉诸计算机上运行,服务程序调用RpcServerRegisterIf来注册他们的接口。下面的代码片断演示了它的作用:
2. 创建绑定信息
为了注册一个端点,并向名字服务数据库宣布自己的存在,服务程序必须创建绑定信息。
绑定使用的一个安全描述符。
如果想使用应用程序只使用一个协议序列调用:RpcServerUseProseq,RpcServerUseProtseqEx,RpcServerUseProseEp,RpcServerUseProtseqEpEx
在选定至少一个协议序列以后,服务程序必须为它使用的每一个协议序列创建绑定信息。他将绑定信息存储在一个绑定句柄中,如果服务程序使用不止一个协议序列,它必须创建多个绑定句柄。一系列的绑定句柄叫做绑定向量。
以下的代码段显示的是如何使用RpcServerInqBindings函数为服务应用程序获得一个绑定向量:
RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
Status =RpcServeringBindings(&rpcBindingVector);
3. 登记服务程序
RPC_STATUS status;
/*RPC_STATUS RPC_ENTRY RpcNsBindingExport(
unsigned long EntryNameSyntax,
unsigned char* EntryName,
RPC_IF_HANDLE IfSpec,
RPC_BINDING_VECTOR*BindingVec,
UUID_VECTOR* ObjectUuidVec
);*/
Status = RpcNsBindingExport(
RPC_C_NS_SYNTAX_DEFAULT,
/.:/servers/our_dept/iface_aserver,
MyInterface_v1_0_s_ifspec,
rpcBindingVector,
NULL);
RpcNsBindingExport函数的第一个参数用来指定第二个参数(EntryName)的语法,目前,微软RPC之支持一种名字服务语法,因此,应用程序因该将第一个参数的值设为RPC_C_NS_SYNTAX_DEFAULT.
第四个参数是一个指向绑定向量的指针,这个绑定向量是服务程序从RpcServeringbindings函数中获得的。
除了从名字服务数据库中导出绑定句柄以外,您还可以导出对象UUID,在这个例子中,只导出了绑定句柄,因此,RpcNsBindingExport函数的最后一个参数被设定为NULL。
4. 注册端点
在服务器宿主计算机的端点因射中注册服务程序,使客户程序可以确定服务程序侦听的是哪个端点(通常是一个TCP/IP端口或是一个有名管道),为了在服务器诉诸计算机的端点映射中注册自己,服务程序需要调用RpcEpRegister函数,如下面的程序代码片断所示:
RPC_STATUS status;
Status = RpcEpRegister(
MyInterface_V1_0_s_ifspec,
rpcBindingVector,NULL,
NULL);