• C#使用AppDomain时的异常分析:Object ‘XXXX.rem’ has been disconnected or does not exist at the server.


    在使用C#的应用程序域的时候,碰到这么一个异常:

    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.

    当你使用AppDomain时,会创建一个Proxy继承自MarshalByRefObject,来跨应用程序域传值。然后在主AppDomain中,使用一个属性或者Dictionary来保存Proxy的引用,但实际的对象是在子AppDomain中,你的主AppDomain中只是保存了一个远程代理。

    这时,远程对象的生命周期并不是应用了.NET标准GC规则,而是用了Remoting Lease and Sponsor Mechanism(不知道对应的专业翻译汉语名词)。这意味着,除非我们显式管理子AppDomain的生命周期,否则它会被GC回收并消失,即便主AppDomain中仍然维护着远程代理的引用。当你再次使用远程代理访问子AppDomain时,就抛出了上面的异常。。(╯-╰)/ 。

    (上面异常中,Object的名字是在你 AppDomain.CreateInstanceAndUnwrap 时,随机生成的)

    如果你希望能长期使用子AppDomain,不让它过期,需要重写Proxy类的 InitializeLifetimeService ,返回NULL即可。

    原文:

    http://blogs.microsoft.co.il/sasha/2008/07/19/appdomains-and-remoting-life-time-service/   

    thx Sasha Goldshtein

  • 相关阅读:
    时刻记住 不要陷入碌碌无为中
    作战の计划
    SpringMVC确定目标方法POJO类型入参的过程
    springmvc框架第一帖HelloWorld
    Hibernate的主键生成策略的介绍
    Hibernate入门基本部署
    对于Hibernate框架的认识
    hibernate的第一个程序
    struts2框架的第一个程序
    java上传组件FileUpload
  • 原文地址:https://www.cnblogs.com/cc299/p/7942143.html
Copyright © 2020-2023  润新知