C# ISponsor和ILease接口是如何工作的?

C# ISponsor和ILease接口是如何工作的?,c#,.net,.net-remoting,object-lifetime,C#,.net,.net Remoting,Object Lifetime,我创建了一个从MarshalByRefObject和ISponsor继承的对象。在我的ISponsor实现中,我只返回一个timespan,以指示我希望对象更新多长时间 当我调用InitializeLifetimeService()以获取一个ILease引用并将其传递到我的ISponsor对象时,它似乎从未被使用过 ISponsor似乎只是返回一个时间跨度,而没有实际使用ILease引用。但我相信,由于涉及远程处理,这里会发生更多的事情 ISponsor和ILease如何工作,特别是在对象生命周

我创建了一个从
MarshalByRefObject
ISponsor
继承的对象。在我的
ISponsor
实现中,我只返回一个timespan,以指示我希望对象更新多长时间

当我调用
InitializeLifetimeService()
以获取一个
ILease
引用并将其传递到我的
ISponsor
对象时,它似乎从未被使用过

ISponsor
似乎只是返回一个时间跨度,而没有实际使用
ILease
引用。但我相信,由于涉及远程处理,这里会发生更多的事情


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

在父AppDomain中,您可以通过调用新AppDomain中对象的代理实例来获得ILease对象。您永远不需要自己实现
ILease
(除了测试
ISponsor
实现之外)

然后用
ILease注册实现
ISponsor
的自定义赞助商对象。注册
调用并配置
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文章。

该链接不再有效——它出现在2003年12月的一期中,不过可以从同一页下载CHM格式的链接

此处有一个回程机器链接:


感谢您提供示例代码。指向MSDN文章的链接不正确,它会重定向到MSDN主页(他们必须已删除该文章)。@DSO感谢您指出这一点。这是在2003年12月出版的MSDN杂志上。我添加了一个回程机器链接。