1. 将每个CAO对象的实例记录在一个SINGLETON中,需要时想SINGLETON对象获取某个实例,然后通过次实例的EVENT或CALLBACK就可以实现SERVER与CLIENT间的交互。2. CAO类实现System.Runtime.Remoting.Services.ITrackingHandler,然后通过System.Runtime.Remoting.Services.TrackingServices.RegisterTrackingHandler注册,当客户端关掉或断线后,CAO对象在租约结束后就会调用DisconnectedObject, 可以在此方法中去掉在SINGLETON中的记录。以上方法我只是部分尝试过,希望能帮到你。
解决方案 »
- 想问一下Silverlight为什么脱离.NET可以运行,开发却可以用C#呢?
- 鼠标Hook中如何判断鼠标中间的滑轮?
- c#:怎么调用js中的返回值
- 求一些显示绑定数据的控件
- 55555 session怎么让值过去呢
- 搜索引擎 SQLSERVER数据库!
- DataGridView 和BindingNavigator
- 有关LDAP的连接读取问题
- 求asp.net + sqlserver 网络应用系统开发与实例 的光盘代码?我是菜鸟,想学习努力学习。希望能得到大哥们的支持。
- 参数ref和out的区别?
- 大虾们,简单的问题:怎样获取快捷方式(.lnk文件)所指向的文件或目录,亦即工作目录等?
- 对于module的困惑(高手指教)!
这个操作只能在客户端进行是吗?那是不是每次服务器端调用CAO对象都要往返两次行程,我也想到了,但是总感觉不是很好。2 这一部分我还没有看太懂,但是还是有点不太好,就像SESSION一样,必须过了租约期才能引发事件。这样很可能CAO实例还没有被破坏掉,客户又重新登陆上来造成麻烦。 如果是服务器主动去查找就好了。
CAO CAOGenerator.GetCAO(“用户特征参数”)
来返回 CAO 对象,GetCAO 可以实现判断算法来决定是返回一个已存在的 CAO 对象,还是创建一个新 CAO 对象。可能此方法比较合适。返回已存在的 CAO 对象时,要考虑到其 CurrentLeaseTime 是否有足够的时间等待客户端的 Renew 申请。这时就需要用到 ISponsor,完美的解决方案需要 ILease.Renew 和 ISponsor.Renewal 双管齐下。通讯正常的情况下,如果时间配合得当,ILease.Renew 能够得到正确的执行,ISponsor.Renewal 执行的机会几乎没有。只有在租约到期了,服务器要查询是否能回收 CAO 对象时,才会查询 ISponsor.Renewal 的返回值。另外可以采用一个双向通道,CAO 对象由聊天客户端创建,然后上传给聊天服务端,这样聊天客户端成了 CAO 对象的服务端,而聊天服务端成了 CAO 对象的客户端。这样就可以由聊天客户端来控制 CAO 对象的生存期租约了。这种方式,就跟原来的方式完全不同了。行与不行,还有待研究。最近,我也迷上了 Remoting 了。我对此技术甚有好感,一起学习。