MarshalByRefObject的主要用途是什么?


Answers:


107

远程处理;这意味着在AppDomain或机器之间,而不是序列化和传输对象,该对象停留在一端,而在另一端创建了代理。到代理所有的方法调用拦截和电话传输的RPC 维基MSDN,造成到其他机器上执行的方法(通常连载的参数和返回值)。

注意:这可能会导致意外的“聊天”界面。现在,对象/代理/ RPC方法比具有明确服务边界的方法更不受欢迎。Microsoft现在建议使用WCF Wikimsdn而不是远程处理。


5
@pavel-这相当复杂,但是至少我们可以弄清昂贵的电话在哪里。如果您指的是带宽,则可以使用一些方法来缓解这种情况。
马克·格雷韦尔

1
有时候,你并不明确的界限,如在上市方案中processdomain.codeplex.com相反,你想要的透明度。
Andrew Savinykh

1
在C#中,所有引用类型都是默认的ref或如何知道的,如果这是一个愚蠢的问题,可以将其存储起来,只是这个概念的新功能@MarcGravell
Ehsan Sajjad

1
@Ehsan不,默认情况下它们是按元帅的。不过,封送处理仅适用于跨越应用程序域边界的情况,因此很少具有相关性。要通过裁判进行编组,必须继承MashalByRefObject
Marc Gravell

28

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

如果您有一个衍生自ContextBoundObject(本身衍生自MarshalByRefObject)的对象,则可以在同一AppDomain内的单独Context中实例化该对象,并使对象之间的通信自动通过Remoting代理系统-允许您将自定义接收器插入Remoting接收器-链。

最终,这使您可以“装饰”对对象的方法调用并实现跨领域服务,例如日志记录和安全性等。


只是考虑这些-我们如何装饰对MBR对象的此类方法调用?这些装饰是否会降低性能?
SO19,3

9

它的基本用途是支持两个appdomain之间的对象访问,并且这些appdomain可以通过远程处理位于同一计算机上或不同计算机上。

看这里


5

调用方应用程序的应用程序域之外的任何对象都应视为远程对象。应该从MarshalByRefObjectClass 派生的远程对象。通过将对象派生可以将任何对象更改为远程对象MarshalByRefObject。不继承自对象的对象MarshalByRefObject称为不可删除对象。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.