关于C# 用MarshalByRefObject 实现远程访问的问题
public class c1
{
public c1()
{
}
public void c1_m1()
{
}
public void c1_m2()
{
}
}
public class testRemoteAccess : MarshalByRefObject
{
public void M1()
{
}
public void M2()
{
}
public c1 C1 = new c1();
}
上面第二个类提供远程服务,并定义一个属性C1(第一个累c1的实例)
现在问题是,在本地程序中创建了MarshalByRefObject的实例,假设为tr1,我用tr1.M1()或tr1.M2()来执行远程的2个方法都没有问题,但是用想用tr1.C1.c1_m1()和tr1.C1.c1_m2()来访问在远程创建c1的对象的方法就不行,谁知道这是怎么回事?
------解决方案--------------------因为c1不是MarshalByRefObject,也不是Serializable。
在“远程访问”中,
方法调用都要通过消息传递来完成的。因此,要实现远程传递,要么一个类可以转化为字节流(Serializable)被传递,要么一个类是可以被代理的(MarshalByRefObject)。
t1是MarshalByRefObject,因此t1只是一个代理,实际实例生存在远程端,因此t1.C1也实际上生存在远程端。你要得到t1.C1,就要求t1.C1可以被远程传递回来,但由于你的实现中c1不是MarshalByRefObject,也不是Serializable,因此行不通。
------解决方案--------------------可以考虑将C1封装到一个对COM可见的类库中,在客户端通过COM组件进行交互
http://hi.baidu.com/linjone09/item/4945bb38a8d4544e023edc7a
------解决方案--------------------http://hi.baidu.com/linjone09/item/4945bb38a8d4544e023edc7a
------解决方案-------------------- webservice ,rdp client ,nat+穿网 等等都可以进行远程连接