服务器上下文运行例程

如果在服务器代表客户端维护上下文时通信中断,可能需要清理例程来清理服务器代表给定客户端维护的状态。 此清理例程称为 上下文运行例程。 连接中断时,服务器存根和运行时库将在客户端打开的每个上下文句柄上调用此例程。

将 [context_handle] 属性应用于类型定义时,上下文运行例程是必需的,并且会隐式声明和命名。 如果 [context_handle] 属性直接应用于参数,则服务器不会调用上下文运行例程。

上下文运行下来例程语法为:

void __RPC_USER type-id_rundown (type-id);

请注意,类型名称确定上下文运行例程的名称。

下面的代码片段提供了一个示例上下文运行例程。 调用使用上下文句柄进行接口开发、使用上下文句柄进行服务器开发以及使用上下文句柄进行客户端开发的示例中使用的 RemoteClose 过程。 此过程关闭文件句柄,释放与文件关联的内存,并为上下文句柄分配 NULL 。 分配 NULL 是调用 RemoteClose 函数的结果,在运行情况中不需要分配 NULL 。 无论上下文句柄是否设置为 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);
}