MarshalByRefObject的目的是什么?
答案 0 :(得分:96)
远程处理;它意味着在AppDomains或计算机之间,而不是序列化和传输对象,对象停留在一端,而另一端创建代理。拦截对代理的所有方法调用,调用作为RPC wiki,msdn 传输,导致该方法在另一台机器上执行(通常将参数序列化并返回值)。
注意:这可能导致意外“聊天”的界面。对象/代理/ RPC方法现在不如具有显式服务边界的方法更可取; Microsoft现在建议使用WCF wiki,msdn 而不是远程处理。
答案 1 :(得分:28)
MarshalByRefObject
的另一个重要用途是通过远程连接sink链来实现AOP。
如果您有一个派生自ContextBoundObject
的对象(它本身派生自MarshalByRefObject
),您可以在同一AppDomain中的单独Context中实例化它,并且对象之间的通信会自动通过Remoting代理system - 允许您将自定义接收器插入Remoting接收器链。
这最终允许您“装饰”对象的方法调用,并实现跨域服务,例如日志记录和安全性等。
答案 2 :(得分:9)
它的基本用途是支持两个应用程序域之间的对象访问,这些应用程序域可以通过远程处理在同一台计算机上或不同的计算机上。
答案 3 :(得分:3)
调用者应用程序的应用程序域之外的任何对象都应被视为远程对象。应从MarshalByRefObject类派生的远程对象。通过从MarshalByRefObject派生任何对象,可以将其更改为远程对象。没有继承MarshalByRefObject的对象称为Non-remotable Objects。