我们知道MarshalByRef允许我们在不同的AppDomain中创建一个对象,并使用Proxy对象来访问它。并且该对象的行为位于它实际存在的AppDomain的不同上下文中。这在隔离和安全方面听起来相当可行。
但为什么还有MarshalByValue? MarshalByValue只是导致一个新的反序列化对象,它是另一个AppDomain中对象的精确副本。如果我们需要该对象,为什么不在当前的AppDomain中创建它?为什么还要先在另一个AppDomain中创建它,然后通过MarshaoByValue将其恢复?
非常感谢。
答案 0 :(得分:2)
取自MSDN: -
考虑MarshalByRefObject时 对象,对象的所有调用都是 往返服务器。有时, 由值组合的对象 而不是通过参考, 以便随后调用 编组对象将是本地的 远程。在DCOM中,实施 需要按值编组的对象 实质性工作。使用.NET远程处理, 所需要的就是 按值返回的对象是 序列化的。