上下文句柄
有时,分布式应用程序需要服务器程序在客户端调用之间维护状态信息。 一次为多个客户端提供服务的服务器程序必须保留每个客户端的状态信息。 由于客户端和服务器在不同的计算机上使用不同的地址空间,并且它们不一定相互信任,因此常见的数据共享方法通常不起作用。 例如,客户端和服务器无法在全局变量中维护其远程会话的状态信息,因为它们不共享相同的全局地址空间。 很难将信息保存在共享文件中,因为它们在不同的计算机上运行。 一种简单方法可能是将所有状态传送到客户端,并让客户端在下一次调用时返回它,但此方法存在缺陷:服务器不一定信任客户端返回正确的状态,并且状态可能隐式绑定到服务器上的其他状态,例如文件句柄或打开的套接字。
Microsoft RPC 提供了一种强大且安全的机制,称为上下文句柄,用于在服务器上保留与给定客户端关联的状态。 状态信息称为服务器的上下文。 客户端可以获取上下文句柄来标识其各个 RPC 会话的服务器上下文。
例如,分布式应用程序中的每个客户端都可以让服务器程序为其 RPC 会话创建和更新数据文件。 服务器可以将每个客户端数据文件的文件句柄用作上下文句柄。 每当客户端请求对服务器为其创建的数据文件执行操作时,客户端都会将上下文句柄传递给服务器。 客户端实际上不会获取文件句柄本身;它获取服务器 RPC 运行时可以与文件句柄唯一关联的不透明令牌。 由于上下文句柄实际上是文件句柄,因此上下文句柄仅在服务器的地址空间中有意义。 但是,客户端程序可以使用上下文句柄来告知服务器要对哪个文件执行更新。
其他数据也可以是上下文句柄。 例如,客户端和服务器可以使用数据库记录的记录号作为文件句柄。 如果客户端需要对特定记录执行大量更新,它可以获取作为上下文句柄的记录编号。 每次调用远程过程更新数据库记录时,它都会将记录号传递给服务器。
上下文句柄通常指向服务器上的内存块,服务器在其中保存各种管理信息。
本部分提供有关定义和使用上下文句柄的信息。 讨论在以下主题中介绍: