代理

代理驻留在调用进程的地址空间中,充当远程对象的代理项。 从调用对象的角度来看,代理是对象。 通常,代理的角色是打包接口参数,以调用其对象接口中的方法。 代理将参数打包到消息缓冲区中,并将缓冲区传递到处理进程之间的传输的通道。 代理作为聚合或复合对象实现。 它包含名为代理管理器的系统提供的管理器部分,以及一个或多个称为接口代理的特定于接口的组件。 接口代理数等于已向该特定客户端公开的对象接口数。 对符合组件对象模型的客户端,代理显示为实际对象。

注意

使用自定义封送处理,可以类似地实现代理,也可以与对象直接通信,而无需使用存根。

 

每个接口代理都是一个组件对象,用于实现其中一个对象的接口封送代码。 代理表示它为其提供封送代码的对象。 每个代理还实现 IRpcProxyBuffer 接口。 尽管代理表示的对象接口是公共的,但 IRpcProxyBuffer 实现是私有的,并在代理内部使用。 代理管理器跟踪接口代理,还包含聚合的控制 IUnknown 接口的公共实现。 每个接口代理可以存在于一个单独的 DLL 中,当它支持的接口具体化到客户端时,加载该 DLL。

代理的结构

下图显示了支持对属于两个接口的参数进行标准封送的代理的结构:IA1 和 IA2。 每个接口代理实现 IRpcProxyBuffer,以便在聚合片段之间进行内部通信。 当代理准备好跨进程边界传递其封送参数时,它会调用通道实现的 IRpcChannelBuffer 接口中的方法。 通道转接对 RPC 运行时库的调用,以便它可以在对象中到达其目标。

显示代理结构的 关系图。

频道

Inter-Object 通信

封送详细信息

MICROSOFT RPC

Stub