【问题标题】:How do the ISponsor and ILease interfaces work?ISponsor 和 ILease 接口如何工作?
【发布时间】:2012-09-06 18:47:05
【问题描述】:

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

当我调用InitializeLifetimeService() 以获取ILease 引用以传递给我的ISponsor 对象时,它似乎从未被使用from examples I've seen

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

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

【问题讨论】:

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


    【解决方案1】:

    在您想要延长远程对象租约的客户端应用程序中,您通常会通过调用

    来获取对象的 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

    【讨论】:

    • 感谢您提供示例代码。 MSDN 文章的链接不正确,它重定向到 MSDN 主页(他们一定已经删除了该文章)。
    • @DSO 感谢您指出这一点。它出现在 2003 年 12 月的 MSDN 杂志上。我添加了一个返航机链接。
    【解决方案2】:

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

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

    当您的 Sponsor 对象被 Renewal 调用时,您可以说明该对象要保持多长时间,并且还可以调整/显示传入 ILease 实例的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2015-11-20
      • 2012-11-09
      • 2018-01-16
      • 2020-09-20
      • 2017-08-12
      • 2013-03-19
      相关资源
      最近更新 更多