轻型客户端处理程序

轻型客户端处理程序允许创建任何大小的通用客户端处理程序,以帮助执行任何类型的标准任务。 作为处理程序,它们可由多个客户端使用。 它们与 OLE 处理程序的不同之处在于,即在启动服务器之前无法创建它们,其生存期与代理管理器的生存期相关联,从而防止了处理程序可能提前释放的争用条件。

代理管理器是系统创建的对象,用于实现 IMarshal 接口。 如果使用标准封送处理,当在对象上调用 CoGetStandardMarshal(或 CoGetStdMarshalEx,用于为轻量级处理程序创建聚合标准封送处理器)时,系统会为你创建它,并且还会实现 IClientSecurityIMultiQI 接口。 在服务器端,有一个相应的系统对象也实现 IMarshal。 这些对象以透明方式处理封送处理。

可能需要实现以下两种常规类型的处理程序:

  • 执行不需要服务器额外数据的服务的处理程序
  • 使用服务器额外数据的处理程序

服务器提供的流中额外数据的一些潜在用途如下所示:

  • 来自服务器的静态数据。 无论要封送的特定接口如何,服务器都会将相同的数据写入流中。
  • 来自服务器的每个接口数据。 根据正在封送的特定接口,服务器可能会将不同的数据写入流中。
  • 每个接口的帮助程序。 每个接口的 COM 组件聚合到客户端处理程序中,并委托给标准代理。 例如,为了提高网络性能,适用于 IStream 的 COM 组件可以执行客户端数据缓存、预读、后写、操作锁定等。
  • 接口的网络版本。 接口的网络版本与客户端和服务器应用程序代码公开的接口不同。 例如,可以像嵌入服务器处理程序那样,在相同的网络接口 INetAB 多路复用公开的接口 IA 和 IB。 例如,可以将数据传输接口转换为使用管道进行高效数据传输的网络接口。

下层客户端可能没有具有自定义处理程序的取消合并接口的功能,原因有两个:首先,在聚合服务器处理程序和对象需要处理程序时,它们可能无法理解自定义封送数据包中使用的 CLSID。 其次,如果处理程序代码需要 COM 中的新功能来创建聚合的标准封送处理器并执行远程 QueryInterface 调用,则处理程序代码甚至可能不会在客户端上运行。

OLE 处理程序