MarshalByRefObject的主要用途是什么?

MarshalByRefObject的目的是什么?

远程处理; 这意味着在AppDomain或机器之间,而不是序列化和传输对象 ,对象停留在一端,代理在另一端创build。 所有对代理的方法调用都被拦截, 调用以RPC wiki , msdn的forms传输,导致方法在另一台机器上执行(通常串行化参数和返回值)。

注意:这可能会导致意外的“健谈”的接口。 对象/代理/ RPC方法现在不如使用显式服务边界的方法更可取; 微软现在推荐WCF 维基 , msdn而不是远程。

MarshalByRefObject另一个重要用途是通过远程接收链实现AOP。

如果你有一个从ContextBoundObject派生的对象(它本身是从MarshalByRefObject派生的),你可以在同一个AppDomain中的一个单独的Context中实例化它,并且让对象之间的通信自动通过Remoting代理系统 – 允许你将自定义接收器插入到Remoting水槽链。

这最终允许你“装饰”方法调用你的对象,并实现交叉服务,如日志logging和安全等。

它的基本用途是支持访问两个应用程序域之间的对象,这些应用程序域可以在同一台计算机上或通过远程处理在不同的计算机上。

看这里

调用者应用程序的应用程序域之外的任何对象应被视为“远程对象”。 应该从MarshalByRefObject类派生的远程对象。 任何对象都可以通过从MarshalByRefObject派生而变成远程对象。 没有从MarshalByRefObjectinheritance的对象称为非远程对象。