ISponsor和ILease接口如何工作?

时间:2012-09-06 18:47:06

标签: c# .net .net-remoting object-lifetime

我创建了一个继承自MarshalByRefObjectISponsor的对象。在ISponsor的实现中,我只返回一个时间跨度来指示我希望对象更新的时间。

当我致电InitializeLifetimeService()以将ILease引用传递到我的ISponsor对象时,它似乎永远不会被使用from examples I've seen

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

ISponsorILease如何运作,特别是在对象生命周期续订方面?

2 个答案:

答案 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