我创建了一个继承自MarshalByRefObject
和ISponsor
的对象。在ISponsor
的实现中,我只返回一个时间跨度来指示我希望对象更新的时间。
当我致电InitializeLifetimeService()
以将ILease
引用传递到我的ISponsor
对象时,它似乎永远不会被使用from examples I've seen。
ISponsor
似乎只是在没有实际使用ILease
引用的情况下返回TimeSpan。但我确信这里有更多的事情,因为涉及远程处理。
ISponsor
和ILease
如何运作,特别是在对象生命周期续订方面?
答案 0 :(得分:3)
在父AppDomain中,您可以通过在新AppDomain中使用对象的代理实例的InitializeLifetimeService或GetLifetimeService调用来获取ILease对象。您永远不需要自己实施ILease(在您的ISponsor实施中测试之外)。
您注册自定义的Sponsor对象,该对象使用ILease.Register调用实现ISponsor,并使用超时配置ILease对象。
当你的赞助商对象被Renewal调用时,你可以说保持对象存活多久,也可以调整/显示ILease实例中传递的属性。
答案 1 :(得分:3)
在您希望扩展远程对象租约的客户端应用程序中,通常可以通过调用
获取对象的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