5

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

当我调用InitializeLifetimeService()以获取ILease要传递给我的ISponsor对象的引用时,它似乎从未在我见过的示例中使用过。

ISponsor似乎只是返回一个 TimeSpan 而没有实际使用ILease参考。但我确信这里还有更多事情要做,因为涉及到远程处理。

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

4

2 回答 2

5

在您想要延长远程对象租约的客户端应用程序中,您通常会通过调用获取对象的 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

于 2014-08-14T18:34:40.787 回答
4

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

比您注册您的自定义赞助商对象,该对象ISponsor通过ILease.Register调用实现并配置ILease具有超时的对象。

当您的 Sponsor 对象被调用时,Renewal您可以说出使对象保持活动状态的时间,并且还可以调整/显示传入ILease实例的属性。

于 2012-09-06T19:14:51.020 回答