关于C# 用MarshalByRefObject 实现远程访问的问题

llsus 2013-11-19 02:04:07

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的对象的方法就不行,谁知道这是怎么回事?
...全文
208 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
llsus 2013-11-20
  • 打赏
  • 举报
回复
这个帖子先结贴吧,我新开了一个帖子,遇到了新的问题,欢迎各位去指教。 http://bbs.csdn.net/topics/390647392
llsus 2013-11-19
  • 打赏
  • 举报
回复
顶上去再问问,明天重开个帖子,把问题写详细一些
江湖评谈 2013-11-19
  • 打赏
  • 举报
回复
webservice ,rdp client ,nat+穿网 等等都可以进行远程连接
llsus 2013-11-19
  • 打赏
  • 举报
回复
勾了好像也没用,无法访问c1的成员,看不到,不能编译。
wyufen 2013-11-19
  • 打赏
  • 举报
回复
http://hi.baidu.com/linjone09/item/4945bb38a8d4544e023edc7a
llsus 2013-11-19
  • 打赏
  • 举报
回复
谢谢楼上,我试试啊,我c1确实DLL中,但是没选“使程序集COM可见”,我选了试试看。
  • 打赏
  • 举报
回复
可以考虑将C1封装到一个对COM可见的类库中,在客户端通过COM组件进行交互 http://hi.baidu.com/linjone09/item/4945bb38a8d4544e023edc7a
llsus 2013-11-19
  • 打赏
  • 举报
回复
远程c1这些类,我加了[Serializable]后,在客户端还是不能通过tr1.C1.c1_m1()的方式来访问,编译不通过,提示需要在客户端项目中加入c1这些类的引用,我加了以后,编译通过了,但是通过tr1.C1.c1_m1()来执行代码时(tr1是MarshalByRefObject代理),实际上执行的是本地c1这个类里面的代码(本地并没有实例化c1),并不是执行远程的c1_m1()这个函数,我怎么都想不通。
llsus 2013-11-19
  • 打赏
  • 举报
回复
谢谢楼上的回答,不过C1是Serializable,上面的代码中忘记写了,但是还是不能访问C1的成员。 如果我必须要访问c1的成员,怎么办呢? 我有个MarshalByRefObject,里面定义了很多类似于C1这种实例,各种类中有很多方法,我需在客户端通过MarshalByRefObject来访问这些类的方法,所以我尝试了那么做,开始c1确实不是Serializable,执行出错,提示需要序列号这些类,我都写了[Serializable]了,还是不行。希望楼上朋友能够帮帮忙。 如果要在MarshalByRefObject中重写一些方法来代替各个类中的方法,虽然可行,但是工作量太大了。
gomoku 2013-11-19
  • 打赏
  • 举报
回复
因为c1不是MarshalByRefObject,也不是Serializable。 在“远程访问”中,方法调用都要通过消息传递来完成的。因此,要实现远程传递,要么一个类可以转化为字节流(Serializable)被传递,要么一个类是可以被代理的(MarshalByRefObject)。 t1是MarshalByRefObject,因此t1只是一个代理,实际实例生存在远程端,因此t1.C1也实际上生存在远程端。你要得到t1.C1,就要求t1.C1可以被远程传递回来,但由于你的实现中c1不是MarshalByRefObject,也不是Serializable,因此行不通。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧