It took me a few hours of reading documentation, but I figured out a fix
for myself earlier today but never had the chance to send the mail
around with my own fix. My own fix means overloading
InitializeLifetimeService() on all MarshalByRefObjects and have it
return null. This will work perfectly for class variables which are
passed cross appdomain. I have several classes which were passed cross
appdomain and are kept around for as long as the applications runs.
Your explanation is in this matter correct. Remoting keeps GC references
around for 5 minutes by default. After 5 minutes of no method calls on
the object, the GC thinks the object is no longer used and disposes of
it. The whole reason for this is because object pinging would case a
massive amount of traffic and depending on objects to report their
destruction isn't reliable.
Basically, the solution is to add this to all classes that are passed
over AppDomain boundaries:
public override object InitializeLifetimeService()
{
return null;
}
Patrick van der Willik
Dino Viehland wrote:
Tomas has checked in a fix for this. Basically what's going on is
that w/ remoting you have a lease which keeps the remote objects
alive. If that lease expires (by default it's 5 or 15 minutes or
something) then the object becomes unreachable. The fix was to
opt-out of the leasing system. Long term we need a better story
around the lease but it'll prevent this from happening for the time being.
*From:* [email protected]
[mailto:[email protected]] *On Behalf Of *Patrick van
der Willik
*Sent:* Wednesday, June 24, 2009 6:52 PM
*To:* Discussion of IronPython
*Subject:* [IronPython] Sandbox AppDomains and 'Object has been
disconnected or does not exist at the server' exceptions
I isolated my IPy instance into a seperate AppDomain with some serious
restrictions on which assemblies are allowed to be loaded. In the
current setup it's impossible to open sockets or read files from disk,
which is exactly what I'm trying to accomplish.
However, when my server is idle for a few minutes(or more simple, when
I put my laptop into hibernation and resume it later that day), the
connection with the appdomain seems to time out. When calling a
function it'll throw an exception with the following message:
"Object
'/0bb4e678_d665_4698_ae30_cdaf28351e72/0jpmcrorxe_qkvj6fml9kboj_3.rem'
has been disconnected or does not exist at the server."
I'm not really sure how I need to solve this one. Research showed that
it probably has to do with Remoting.
Patrick
------------------------------------------------------------------------
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com