拦截跨上下文调用

当一个对象在给定的上下文中被激活时,在上下文中对它的后续调用或从它发出的调用的处理方式与跨上下文边界的调用不同。 跨上下文边界的调用使用轻型代理进行处理。 这些代理处理将运行时环境从容纳调用者的环境调整为容纳被调用者的环境所需的任何中介。 此过程称为拦截

跨上下文调用拦截是必要的,因为不同上下文中的对象有不同的运行时要求,这正是上下文的原因。 COM+ 拦截作为方法参数传递的任何对象引用,并自动将它们转换为代理,以便它们在新的上下文中可用。

如果通过其他方式(例如,在全局变量中)跨上下文边界共享对象引用,则应始终使用 CoMarshalInterfaceCoUnmarshalInterface。 这些函数可以将对象引用转换为在不同上下文中可用的代理。 切勿跨越上下文边界共享原始对象引用。

在对象公开无法封送的接口的情况下,跨上下文调用的行为可能会产生不必要的后果。 在这种情况下,你可能需要坚持不能封送的对象只能在其调用方的上下文中激活,而不能在其自身的上下文中。 可以通过在组件属性页的激活选项卡上的必须在调用方上下文中激活选项来执行此操作。 (请参阅在调用方上下文中强制激活以获取分步说明。)

上下文激活