初始化租约

MarshalByRefObject 实例 (MBR) 可以创建它们自身的租约条款,或者可以配置它们以使用应用程序或计算机配置文件的 <lifetime> 元素中所指定的租约属性。只有当租约处于其初始状态时(即当对 InitializeLifetimeService 的调用创建该租约时),设置生存期属性才会起作用;后继的调用将不起作用。

重写 InitializeLifetimeService

当在已重写的 InitializeLifetimeService 中调用 ILease lease = (ILease)base.InitializeLifetimeService(); 方法时,将为该对象返回现有租约,或者如果不存在任何租约,则返回新租约。只有在返回新租约时才可以设置租约属性;您必须确保其状态为 LeaseState.Initial,否则将引发异常。

影响生存期服务的唯一调用是对 .NET 远程处理基础结构中的 InitializeLifetimeService 的调用,该调用将激活租约。其他代码可以调用 InitializeLifetimeService 并创建租约,但该租约将保持其初始状态,直到它被返回到 .NET 远程处理基础结构为止。不处于初始状态的现有租约不能用新值进行设置,不过新的接收器可以将该租约返回到基础结构,以允许对象的多个接收器指向同一个租约。

如果租约时间为 0(零)或返回空租约,则不创建任何租约。如果 RenewOnCallTime 为 0(零),则不创建任何接收器,但将创建一个租约。

InitializeLifetimeService 的实现通常调用基类的相应方法以检索远程对象的现有租约。如果对象以前从未被封送,则返回的租约将处于其初始状态且可以设置租约属性。封送对象后,租约从初始状态变为活动状态,并且将忽略任何初始化租约属性的尝试(引发异常)。InitializeLifetimeService 在激活远程对象后调用。租约的主办方列表可以与激活调用一起提供,而其他主办方可以在租约处于活动状态的任何时候添加。

有关如何重写 InitializeLifetimeService 接口的信息,请参见 asdasdasdasdasdasd

请参见

任务

如何:重写 InitializeLifetimeService 接口

概念

续订租约
远程处理示例:生存期
生存期租约