Remoting问题:服务器端如何调用客户端激活的远程对象?——详情.. ...

limzustc 2005-09-05 04:40:19
运行方式:客户端激活。

//远程对象类定义
public class RemoteObj:MarshalByRefObject
{
//状态
private int _state = 0;

//客户端调用
public void CalledByClient(int state)
{
_state = state;
}


//服务端调用?
public void CalledByServer(int state)
{
_state = state;
}
}


问题是:
1、客户端激活远程对象时,如何让服务器端程序知道?——在构造函数中处理?
2、如果问题1解决,也就是可以在服务器端获取客户端激活的对象的应用,是否可以在服务器端直接调用该对象的CalledByServer方法;
3、如果问题2解决,是否会影响对象的租借期?
4、对应问题1,对象的销毁可否由类似操作?

初学Remoting。谢谢!
...全文
231 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice_fire_fox 2005-12-27
  • 打赏
  • 举报
回复
最好使用远程事件.
http://wayfarer.cnblogs.com/articles/75213.html
limzustc 2005-12-23
  • 打赏
  • 举报
回复
to xiaxilin(good good study, day day up!) :
.net 中 “对象释放”是由“垃圾回收”GC完成的,对象被arraylist关联后,应该不会被GC回收的。

我试试。

另外:对于客户端激活的对象类型,在一个程序中既作服务器端,又作客户端是可以的。
时间太久了,不记得当初为什么没实现。找时间我把实现后的Demo贴上来。
谢谢各位!
哈哈007哈 2005-09-14
  • 打赏
  • 举报
回复
哈哈,这个问题我也想问,不过我是在服务器端做了个静态的arraylist

每次有客户激货对象生成的时候就往arraylist加,当对象释放的时候就清理arraylist

这样就可以记录了
limzustc 2005-09-09
  • 打赏
  • 举报
回复
To wujun510():
你帖的代码似乎与我得问题没关系。

再顶。
wujun510 2005-09-08
  • 打赏
  • 举报
回复
SERVER端:
注册TCP/HTTP通道:
TcpChannel tcp=new TcpChannel(8085);
ChannelServices.RegisterChannel(tcp);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(dataconn.dataClass),"Dataconn",WellKnownObjectMode.SingleCall);

HttpChannel http=new HttpChannel(8086);
ChannelServices.RegisterChannel(http);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(dataconn.dataClass),"Dataconn",WellKnownObjectMode.SingleCall);


CLIENT 端:
HttpChannel httpchan = new HttpChannel();
ChannelServices.RegisterChannel(httpchan);
dataconn.dataClass dtconntemp1 = (dataconn.dataClass)Activator.GetObject(typeof(dataconn.dataClass), "http://192.168.0.25:8086/Dataconn");


以上是我的程序上复制下来的,可以参考一下.
limzustc 2005-09-08
  • 打赏
  • 举报
回复
Singleton模式或许可以,但“客户端激活”的对象处理起来比较困难——主要设计我的问题中的后面几个——主要是垃圾回收。


%%%%%%%%%%%%%
又遇到另外一个问题:(各位注意:仍然是“客户端激活”)

对于客户端激活的对象类型,可否在一个程序中既作服务器端,又作客户端?Remoting是否允许这么作?
这有些类似使用Remoting作聊天程序。
Flashcom 2005-09-08
  • 打赏
  • 举报
回复
不过上面只是在Singleton模式才行!!!
Flashcom 2005-09-08
  • 打赏
  • 举报
回复
直接实例化这个类就可以了!!!
Console.WriteLine("服务器开始启动!");
RemotingConfiguration.Configure("Server.config");
ClassObj=new SMSClassObj();
ObjRef obj = RemotingServices.Marshal(ClassObj,"SMSMeun");

其中ClassObj就是这个实例,类SMSClassObj就是远程调用类,Server.config中包含服务中的一些配置
PCI_E 2005-09-08
  • 打赏
  • 举报
回复
哦!我脑袋转不过来了!
limzustc 2005-09-08
  • 打赏
  • 举报
回复
up
ybzsu 2005-09-06
  • 打赏
  • 举报
回复
。。。。
这个问题太牛了
学习!

limzustc 2005-09-06
  • 打赏
  • 举报
回复
up一下。

110,539

社区成员

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

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

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