ISponsor和ILease接口如何工作?
我创建了一个inheritanceMarshalByRefObject
和ISponsor
的对象。 在我的ISponsor
实现中,我只返回一个时间跨度来指示我想要更新对象的时间。
当我调用InitializeLifetimeService()
来获取要传递到我的ISponsor
对象的ILease
引用时,它似乎永远不会在我看到的示例中使用。
ISponsor
似乎只是在没有实际使用ILease
引用的情况下返回TimeSpan。 但我确信这里有更多的事情,因为涉及远程处理。
ISponsor
和ILease
如何工作,特别是在对象生命周期更新方面?
在父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