ISponsor和ILease接口如何工作?

我创建了一个inheritanceMarshalByRefObjectISponsor的对象。 在我的ISponsor实现中,我只返回一个时间跨度来指示我想要更新对象的时间。

当我调用InitializeLifetimeService()来获取要传递到我的ISponsor对象的ILease引用时,它似乎永远不会在我看到的示例中使用。

ISponsor似乎只是在没有实际使用ILease引用的情况下返回TimeSpan。 但我确信这里有更多的事情,因为涉及远程处理。

ISponsorILease如何工作,特别是在对象生命周期更新方面?

在父AppDomain中,您可以通过在新AppDomain中使用对象的代理实例的InitializeLifetimeService或GetLifetimeService调用来获取ILease对象。 您永远不需要自己实施ILease(在您的ISponsor实施中测试之外)。

比你注册你的自定义赞助商对象,它使用ILease.Register调用实现ISponsor并配置带有超时的ILease对象。

使用Renewal调用Sponsor对象时,您可以说保持对象存活多长时间,也可以调整/显示ILease实例中传递的属性。

在要扩展远程对象租约的客户端应用程序中,通常通过调用获取对象的ILease接口

 ILease lease = (ILease)RemotingServices.GetLifetimeService( remoteObject ); 

然后将它传递给您的自定义赞助商对象

 lease.Register( customSponsor ); 

你的自定义赞助商类看起来像这样:

 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); } } 

有关更多信息,请查看有关租赁和赞助的这篇有用的MSDN文章。 http://msdn.microsoft.com/en-us/magazine/cc300474.aspx

该链接不再有效 – 它是在2003年12月的问题,虽然可以从同一页面以CHM格式下载。

返回机器链接在这里:

https://web.archive.org/web/20080906214332/http://msdn.microsoft.com/en-us/magazine/cc300474.aspx