续订租约

本主题介绍一项传统技术,保留该技术是为了向后兼容现有的应用程序,不建议对新的开发使用该技术。现在应该使用  Windows Communication Foundation (WCF) 来开发分布式应用程序。

创建租约后,唯一可以更改的租约属性是 ILease.CurrentLeaseTime。续订租约有两种方式:客户端可以直接调用 ILease.Renew,也可以联系主办方并请求续订租约。

主办方

主办方负责侦听宿主应用程序域延长特定对象租约的请求。主办方通过获取对租约的引用并调用 ILease.Register 来实现 ISponsor 并向租约管理器注册。一般而言,当每个远程对象拥有多个客户端时,让远程对象向一个客户端发送租约续订请求比让所有客户端向远程对象发送请求更有效率。

8xw7t072.note(zh-cn,VS.100).gif注意:
从 .NET Framework 1.1 版起,在注册主办方来参与服务器对象的生存期时,需要对服务器应用程序域和主办方都设置 Full 自动反序列化。有关详细信息,请参见.NET 远程处理中的自动反序列化

使用主办方还可以在大量客户端中提供动态续订策略。这样可以有效地解决并行问题,并行问题是一个或多个客户端向多个远程对象发送待解决问题时出现的。当一个远程对象返回解决方案时,主办方将得到通知,并允许所有其他远程对象租约过期。

此做法还有助于将远程对象迁移到其他计算机中,因为远程对象会从其当前位置联系客户端,而不用客户端去寻找它。

另外需要注意的是,如果主办方位于大型网络甚至是设置了很多防火墙的 Internet 上,可能难以连接到主办方。若要避免此问题,请备份主办方,或者将主办方置于离宿主应用程序域较近的位置以提高连接到主办方的几率。

宿主应用程序域的租约管理器负责维护主办方的列表。当需要主办方来续订租约时间时,将请求处于列表顶部的主办方来执行此操作。如果主办方在 ILease.SponsorshipTimeout 时间跨度内未做出响应,则将其从列表中移除并调用列表中的下一个主办方。

使用主办方续订租约

主办方通过获取特定对象引用的租约,将自身注册为主办方,然后等待远程租约管理器调用 ISponsor.Renewal 来参与生存期租约。调用 RemotingServices.GetLifetimeService 可获取对象租约,调用命令将需要租约的对象用作参数。此调用是 RemotingServices 类的一个静态方法。如果该对象位于应用程序域本地,则此调用的参数将是对该对象的本地引用,返回的租约将是对租约的本地引用。如果该对象位于远程,则会将代理作为参数传递。请注意,租约本身是一个引用封送 (MBR) 对象,因此在获取远程对象的租约时,将获得该租约的代理。因此,当您调用租约上的方法时,实际是在远程调用服务器进程。

接下来,应调用 Register 并传递主办方和可选的 TimeSpan 对象(如果刚刚创建了该对象),以便向远程租约管理器注册主办方。

当此对象的租约过期时,租约管理器可以回调远程主办方。主办方针对其 Renewal 实现的返回值将变为新的租约时间。

另请参见

任务

如何:续订租约

参考

<lifetime> 元素
远程处理设置架构

概念

远程处理示例:生存期
生存期租约
初始化租约