是否已将代理(marshallbyref)对象的方法调用参数序列化?

时间:2012-02-11 19:16:19

标签: .net serialization marshalling remoting

我正试图绕过这个来做出正确的设计决定。

假设我创建了一个新的appdomain B,在其中创建一个对象O的实例,然后将对该对象的引用传递回appdomain A,这样A就可以进行如下调用:

O.SomeMethod(parameter)

SomeMethod中的代码将在appdomain B中运行,这正是我所期望的。 我想知道参数和返回值会发生什么。 是使用binaryformatter序列化并按值传递,还是仅在appdomains之间传递的数据的引用?

我希望它是后者,这意味着你可以让O.SomeMethod()返回大量数据而没有序列化惩罚。

谢谢!

1 个答案:

答案 0 :(得分:0)

传递给函数的参数需要在调用方法之前传递appdomain边界。返回的值也需要通过边界(在另一个方向)。

任何时候对象都需要通过边界:

  1. 通过引用编组,如果它继承自MarshalByRefObject;或
  2. 在一侧序列化,通过边界转移,然后反序列化。如果它不从MBRO继承,则会发生这种情况。
  3. 要回答你的问题,是的,参数被序列化然后反序列化,除非它们继承自MBRO