C# 如何为非从MarshalByRefObject派生的远程对象创建代理?
在AppDomainC# 如何为非从MarshalByRefObject派生的远程对象创建代理?,c#,.net,remoting,C#,.net,Remoting,在AppDomainA中,我有一个类型为T的对象oT既不是可序列化的也不是从MarshallByRefObject派生的。类型T由插件主机提供,我无法控制它 我想创建一个AppDomainB,并将代理传递给o到B中的一个方法,但我遇到了一个难题:如何创建代理 B中的方法应该能够调用o上的方法并读取属性等。这些方法的结果必须以类似的方式进行代理。您不能。AppDomains之间通信的唯一方式是使用代理或副本(即可序列化) 能否将您的类型封装在继承自MarshalByRefObject的代理中,并使
A
中,我有一个类型为T
的对象o
T
既不是可序列化的也不是从MarshallByRefObject
派生的。类型T
由插件主机提供,我无法控制它
我想创建一个AppDomainB
,并将代理传递给o
到B
中的一个方法,但我遇到了一个难题:如何创建代理
B
中的方法应该能够调用o
上的方法并读取属性等。这些方法的结果必须以类似的方式进行代理。您不能。AppDomains之间通信的唯一方式是使用代理或副本(即可序列化)
能否将您的类型封装在继承自MarshalByRefObject
的代理中,并使用该代理?如果您需要代理,最好将该对象封装在继承自MarshalByRefObject
的类型中(作为私有字段),该类型具有公共方法等使其可用;从本质上说,这是一个门面
如果您想要序列化,我会使用与对象相关的DTO,但类型不同(可序列化)。只需发送状态,然后在另一端重建实际类型。我建议您创建一个适当的代理对象,该对象实现与您尝试代理的对象相同的接口,并且还继承自MarshalByRefObject。然后,远程代理对象。在服务器端,代理将委托给您的对象
根据您的需求,服务器对象将包含静态对象(所有客户端都看到相同的对象)或非静态对象(每个客户端都获得一个新副本)
对于静态成员,您需要在服务器中创建代理并使用对象初始化它,或者第一个分配的代理(当第一个客户端连接时)创建您的对象并初始化自身。我用过前者
当然别忘了租赁。是的,我一直在考虑一个正面。有没有为整个API创建外观的库?我现在正在研究代码生成。。。