dmc*_*mck 5 .net c# object-lifetime .net-remoting
我创建了一个继承自MarshalByRefObject
和的对象ISponsor
。在我的实现中,ISponsor
我只返回一个时间跨度来指示我希望对象更新多长时间。
当我调用InitializeLifetimeService()
以获取ILease
要传递到我的ISponsor
对象中的引用时,它似乎从未在我见过的示例中使用过。
ISponsor
似乎只是在没有实际使用ILease
参考的情况下返回一个 TimeSpan 。但我敢肯定,由于涉及远程处理,这里还有更多事情要做。
如何工作ISponsor
和ILease
工作,特别是在对象生命周期更新方面?
在您想要延长远程对象租约的客户端应用程序中,您通常会通过调用获得该对象的 ILease 接口
ILease lease = (ILease)RemotingServices.GetLifetimeService( remoteObject );
Run Code Online (Sandbox Code Playgroud)
然后将您的自定义赞助商对象传递给它
lease.Register( customSponsor );
Run Code Online (Sandbox Code Playgroud)
您的自定义赞助商课程将如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看有关租赁和赞助的这篇有用的 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
InitializeLifetimeService
在父 AppDomain 中,您可以通过调用GetLifetimeService
新 AppDomain 中对象的代理实例来获取 ILease 对象。您永远不需要自己实现ILease
(除了测试您的ISponsor
实现之外)。
然后您注册自定义 Sponsor 对象,该对象ISponsor
通过ILease.Register
调用实现并配置ILease
具有超时的对象。
当您的 Sponsor 对象被调用时,Renewal
您可以说出该对象保持活动状态的时间,也可以调整/显示传入实例的属性ILease
。