服务器上下文运行例程
如果在服务器代表客户端维护上下文时通信中断,则可能需要清理例程来代表给定客户端清理服务器维护的状态。 此清理例程称为 上下文运行例程。 当连接中断时,服务器存根和运行时库将在客户端打开的每个上下文句柄上调用此例程。
在将 [context_handle] 属性应用于类型定义时,需要上下文运行例程,并且是隐式声明和命名的。 如果 [context_handle] 属性直接应用于参数,则服务器将不会调用上下文运行例程。
上下文运行例程语法为:
void __RPC_USER type-id_rundown (type-id);
请注意,类型名称确定上下文运行例程的名称。
后面的代码片段提供示例上下文运行例程。 调用在 接口开发中使用上下文句柄、使用上下文句柄 服务器开发使用上下文句柄和 使用上下文句柄的客户端开发的示例中使用的 RemoteClose 过程。 此过程关闭文件句柄,释放与文件关联的内存,并将 NULL 分配给上下文句柄。 分配 NULL 是调用 RemoteClose 函数的结果,在运行方案中不需要。 无论上下文句柄是否设置为 NULL,RPC 运行时都会清理其状态。
//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(
PCONTEXT_HANDLE_TYPE phContext)
{
printf("Client died with an open file, closing it..\n");
RemoteClose(&phContext);
assert(phContext == 0);
}