代理
代理驻留在调用进程的地址空间中,充当远程对象的代理项。 从调用对象的角度来看,代理是对象。 通常,代理的角色是在其对象接口中为方法调用打包接口参数。 代理将参数打包到消息缓冲区中,并将缓冲区传递到处理进程之间传输的通道。 代理作为聚合或复合对象实现。 它包含名为代理管理器的系统提供的管理器部分,以及一个或多个名为接口代理的特定于接口的组件。 接口代理数等于已向该特定客户端公开的对象接口数。 对于符合组件对象模型的客户端,代理显示为实际对象。
注意
使用自定义封送,可以类似地实现代理,也可以与对象直接通信,而无需使用存根。
每个接口代理都是一个组件对象,用于实现其中一个对象的接口的封送代码。 代理表示为其提供封送代码的对象。 每个代理还实现 IRpcProxyBuffer 接口。 尽管代理表示的对象接口为公共接口,但 IRpcProxyBuffer 实现为私有实现,并在代理内部使用。 代理管理器跟踪接口代理,还包含控制聚合的 IUnknown 接口的公共实现。 每个接口代理可以存在于一个单独的 DLL 中,当支持的接口具体化到客户端时,加载该 DLL。
代理的结构
下图显示支持对属于两个接口的参数进行标准封送的代理的结构:IA1 和 IA2。 每个接口代理实现 IRpcProxyBuffer,以便在聚合片段之间进行内部通信。 当代理准备好跨进程边界传递其封送参数时,它会在通道实现的 IRpcChannelBuffer 接口中调用方法。 通道又会转发对 RPC 运行时库的调用,以便可以到达对象中的目标。
相关主题