解决C#跨应用程序域对象生存期问题(remoting中断)
2015-12-04 13:57
441 查看
解决C#跨应用程序域对象生存期问题
标签:c#objectnulldll活动c
2011-05-17 20:30
883人阅读 评论(0)
收藏 举报
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b367fdce88ee208da19a58e7fab01f44.jpg)
分类:
问题解决(1)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/b16356edc9d65f9de5798055c2b20c3c.jpg)
![](http://static.blog.csdn.net/images/arrow_triangle_up.jpg)
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
很长一段时间里,URWPGSim2D的调试中总是碰到一个远程对象相关错误。加载策略运行时,如果有提示对话框弹出没有注意到过了一段时间,或下了断点在某处,停下来思考了一段时间,然后继续运行时会弹出类似如下错误提示:
System.Runtime.Remoting.RemotingException: Object '/76e7cd41_2cd2_4e89_9c03_fae752ec4d59
/zb_uualy_cm6kwizjlentfdl_3.rem' has been disconnected or does not exist at the server.
其中单引号内的内容每次都不相同。
为实现策略dll的独立加载,使用了跨应用程序域(AppDomain)技术,这个问题必和AppDomain有关,而且能猜测,应该是和对象的生存期有关。经过一番搜寻,找到这篇文献:
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/07/19/appdomains-and-remoting-life-time-service.aspx
由上述文献得知,错误是MarshalByRefObject派生类对象的生存期(这里应该是指不活动就销毁的时间间隔)默认为5分钟所致。URWPGSim2D的客户端和服务端加载独立的策略dll文件,用到了两个继承于MarshalByRefObject的类。一个是用于加载策略的工厂类StrategyInterfaceFactory,一个是策略类Strategy。在这两个类中重载(override)InitializeLifetimeService方法,让其返回null而非一个ILease实现,即可让这两个类的对象生存期无限。
/// <summary>
/// override the InitializeLifetimeService to return null instead of a valid ILease implementation
/// to ensure this type of remote object never dies
/// </summary>
/// <returns>null</returns>
public override object InitializeLifetimeService()
{
//return base.InitializeLifetimeService();
return null; // makes the object live indefinitely
}
相关文章推荐
- c#练习题
- C#使用Graphics在窗体上绘图(加滚动条)
- C#字符串数组中含数字时的排序
- C# LeetCode 解决 ExcelConverttNumber to Column
- C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母
- C# 读取压缩文件方式及乱码处理
- C#正则表达式匹配字符串中的数字
- C#导出Excel和CSV文件
- C#图像处理
- C# 代码执行时间
- #Mac#快捷键
- 【C#】 之 构造函数
- C# 实现简单状态机(参考代码)
- C#使用ImitateLogin模拟登录百度
- C#加密方法总汇
- c# 退出
- 基于CC2530的温湿度传感器和基于C#的应用界面设计
- C#中通过位运算实现多个状态的判断
- C#按钮替换图片
- c#页面缓存