问题
I've created a object that inherits from MarshalByRefObject
and ISponsor
. In my implementation of ISponsor
I just return a timespan to indicate how long I want the object renewed for.
When I call InitializeLifetimeService()
to get an ILease
reference to be passed into my ISponsor
object it never appears to be used from examples I've seen.
ISponsor
just seems to return a TimeSpan without actually using the ILease
reference. But I'm sure there is more going on here since remoting is involved.
How do ISponsor
and ILease
work, specifically in terms of object lifetime renewal?
回答1:
In parent AppDomain you obtain ILease object by either InitializeLifetimeService
or GetLifetimeService
call with proxy instance of object in the new AppDomain. You never need to implement ILease
yourself (outside of testing your ISponsor
implementation).
Than you register your custom Sponsor object which implements ISponsor
with ILease.Register
call and configure ILease
object with timeouts.
When your Sponsor object get called with Renewal
you can say how long to keep the object alive and also may adjust/display properties of passed in ILease
instance.
回答2:
In a client app where you want to extend the lease of a remote object you would typically obtain an ILease interface for the object by calling
ILease lease = (ILease)RemotingServices.GetLifetimeService( remoteObject );
and then pass it your custom sponsor object
lease.Register( customSponsor );
where your custom sponsor class will look something like this:
private class CustomSponsor : MarshalByRefObject, ISponsor
{
public TimeSpan Renewal(ILease lease)
{
Debug.Assert(lease.CurrentState == LeaseState.Active);
//Renew lease by 5 minutes
return TimeSpan.FromMinutes(5);
}
}
For more information check out this helpful MSDN article on leasing and sponsorship. http://msdn.microsoft.com/en-us/magazine/cc300474.aspx
The link no longer works - it was in the December 2003 issue though which can be downloaded in CHM format from the same page.
A wayback machine link is here:
https://web.archive.org/web/20080906214332/http://msdn.microsoft.com/en-us/magazine/cc300474.aspx
来源:https://stackoverflow.com/questions/12306497/how-do-the-isponsor-and-ilease-interfaces-work