Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为非从MarshalByRefObject派生的远程对象创建代理?_C#_.net_Remoting - Fatal编程技术网

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

C# 如何为非从MarshalByRefObject派生的远程对象创建代理?,c#,.net,remoting,C#,.net,Remoting,在AppDomainA中,我有一个类型为T的对象oT既不是可序列化的也不是从MarshallByRefObject派生的。类型T由插件主机提供,我无法控制它 我想创建一个AppDomainB,并将代理传递给o到B中的一个方法,但我遇到了一个难题:如何创建代理 B中的方法应该能够调用o上的方法并读取属性等。这些方法的结果必须以类似的方式进行代理。您不能。AppDomains之间通信的唯一方式是使用代理或副本(即可序列化) 能否将您的类型封装在继承自MarshalByRefObject的代理中,并使

在AppDomain
A
中,我有一个类型为
T
的对象
o
T
既不是可序列化的
也不是从
MarshallByRefObject
派生的。类型
T
由插件主机提供,我无法控制它

我想创建一个AppDomain
B
,并将代理传递给
o
B
中的一个方法,但我遇到了一个难题:如何创建代理


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

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

能否将您的类型封装在继承自
MarshalByRefObject
的代理中,并使用该代理?

如果您需要代理,最好将该对象封装在继承自
MarshalByRefObject
的类型中(作为私有字段),该类型具有公共方法等使其可用;从本质上说,这是一个门面


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

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

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

对于静态成员,您需要在服务器中创建代理并使用对象初始化它,或者第一个分配的代理(当第一个客户端连接时)创建您的对象并初始化自身。我用过前者


当然别忘了租赁。

是的,我一直在考虑一个正面。有没有为整个API创建外观的库?我现在正在研究代码生成。。。