在两次调用之间维护服务器上的状态

通常需要在单独的 RPC 调用之间维护服务器上的状态-使用上下文句柄是执行此操作的最佳方法。 有关上下文句柄在内部运行方式的几句话有助于了解上下文句柄何时效果最佳。

客户端永远不会收到服务器上保留的状态。 通常,服务器上的状态是指向内存块的指针,客户端没有有关它的信息。 所有客户端接收都是一个很大的唯一数字,与服务器发送到客户端的其他信息相关联,它表示所有后续操作中的上下文句柄。 每当客户端引用打开的句柄时,它会在打开上下文句柄时发送它从服务器收到的大量句柄。

服务器会跟踪它发送到客户端的所有大型数字。 当服务器收到表示上下文句柄的较大数字时,它会在该客户端的有效、未完成的上下文句柄的集合中查找该数字,并查找对应于给定大数的服务器端上下文。 这会传递到服务器例程。 如果未找到大型数字,则会引发RPC_X_SS_CONTEXT_MISMATCH异常并将其传播到客户端。

此设计的推论如下:

  • 上下文句柄仅在现有客户端/服务器会话的上下文中有效。 它不能传递给另一个客户端。
  • 如果重新启动服务器,或者失去与客户端的连接,上下文句柄将变为无效。
  • 客户端无法解释上下文句柄在服务器上表示的内容。 对客户端而言,所有上下文句柄都只是较大的数字。

如果客户端失败,服务器将收到通知,并使用运行机制清理其上下文句柄。