“对象已断开或在服务器上不存在”异常

问题描述:

我需要在我的应用程序使用跨AppDomain的电话,有时我有这个RemotingException:“对象已断开或在服务器上不存在”异常

对象“/ 2fa53226_da41_42ba_b185_ec7d9c454712/ygiw + xfegmkhdinj7g2kpkhc_7 .rem'已断开连接或在服务器上不存在。

目标对象仍然存在,我已经检查过它。

UPD我已经在目标对象的终结器中设置了断点,它从来没有命中。因此,这个对象是活的,并没有被GC'ed。

这可能是因为服务器端的本地垃圾收集器收集对象。您可以通过续租来防止这种情况发生。您可以在这些文章中了解更多有关:

更新:不幸的是,从2008年或更旧的MSDN杂志的问题不再是浏览的网上,但仅作为.chm文件,您必须下载到本地计算机。

+0

它不能被GC'ed,因为服务器端保持对这个对象的引用。 – user626528 2011-06-14 07:16:23

+1

如果您已禁用终身管理,则通过远程处理(因此无法进行GC操作),直到您在服务器端断开对象,该对象仍将暴露。 – Guillaume 2011-06-14 08:24:31

+0

@Guillaume,我如何断开跨域编组引用? – user626528 2011-06-14 08:57:27

管理对象生存期这是因为前面的问题中可以找到服务器端的生命周期管理在租约到期时断开对象,以允许GC收集它。如果您尝试从客户端使用它,即使它尚未在服务器上进行GC操作(例如,因为仍然存在其他引用),但租约已过期,您将得到一个异常。这是为了避免不可预知的行为。接受的答案为如何正确管理远程.NET对象的生存期提供了很好的参考。

+1

感谢您的解释,投票 – Shelest 2013-05-24 14:06:26

在我的情况下,问题是,在客户端计算机上,有一个虚拟网络适配器生效,禁止虚拟网络适配器,问题解决了

在我的情况下,存储在该用SQL的LocalDB发生在App_Data文件夹里面Web项目。每当我尝试使用包控制台运行update-database来使用迁移来初始化我的实体框架数据库时,什么都不会发生。然后过了一段时间,我得到了那个错误。

我通过修改App_Data上的文件权限解决了这个问题。一旦修复,瞧,它的工作。