COM中Double hop marshaling疑问:跨进程调用是否经中间进程?进程退出后代理状态?
COM跨进程调用问题解答
问题1:Process A对Process C的调用是否会经过Process B?
不会。当Process B将Process C中创建的对象接口返回给Process A时,COM底层会自动为A生成指向Process C对象的代理(Proxy)。后续A调用该接口方法时,会通过COM的RPC机制直接与Process C的存根(Stub)通信,Process B完全不参与A和C之间的调用流程,不会作为中间转发节点。
问题2:若Process B退出,Process A中的对象代理在调用方法时是否会报错?
不会报错(只要Process C仍在运行)。Process A持有的是独立指向Process C对象的代理,这个代理的通信通道仅与Process C绑定。Process B的退出不会影响A与C之间已建立的COM连接,只有当Process C本身退出时,A的调用才会触发类似RPC_S_SERVER_UNAVAILABLE的错误。
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

