代码之家  ›  专栏  ›  技术社区  ›  Daren Thomas

如何为非从MarshalByRefObject派生的远程对象创建代理?

  •  2
  • Daren Thomas  · 技术社区  · 16 年前

    在AppDomain中 A 我有一个目标 o 类型 T . T 两者都不是 Serializable 也不是源于 MarshalByRefObject . 类型 T 是由我无法控制的插件主机提供的。

    B 并将代理传递给 o 使用一种方法 B ,但我很困惑:如何创建代理?

    中的方法 B 应该能够在上调用方法 o 和读取属性等。这些方法的结果必须以类似的方式进行代理。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Richard    16 年前

    我建议您创建一个适当的代理对象,该对象实现与您尝试代理的对象相同的接口,并且还继承自MarshalByRefObject。然后,远程代理对象。在服务器端,代理将委托给您的对象。

    根据您的需求,服务器对象将包含静态对象(所有客户端都看到相同的对象)或非静态对象(每个客户端都获得一个新副本)。

    当然,别忘了租赁。

        2
  •  3
  •   Marc Gravell    16 年前

    如果你想要一个 ,最好的方法可能是将对象封装在 继承自 MarshalByRefObject (作为一个私有领域),并有公共方法等使其可用;从本质上说,这是一个门面。

    如果您想要序列化,我会使用一个DTO 相关的 指向对象,但使用不同的(可序列化)类型。只需发送状态,然后在另一端重建实际类型。

        3
  •  2
  •   Brian Rasmussen    16 年前

    你不能。AppDomains之间通信的唯一方式是使用代理或副本(即可序列化)。

    MarshalByRefObject 用它来代替?

    推荐文章