Freigeben über


Initialisieren von Leases

MarshalByRefObject-Instanzen (MBRs) können eigene Leasezeiten erstellen. Sie können auch so konfiguriert werden, dass die Leaseeigenschaften im <lifetime>-Element einer Anwendung oder Konfigurationsdatei des Computers verwendet werden. Das Festlegen von Lebensdauereigenschaften ist nur dann möglich, wenn sich ein Lease in seinem Anfangszustand befindet, d. h. durch einen Aufruf von InitializeLifetimeService erstellt wird. Nachfolgende Aufrufe haben keine Auswirkung.

Überschreiben von InitializeLifetimeService

Wenn die ILease lease = (ILease)base.InitializeLifetimeService();-Methode in einem überschriebenen InitializeLifetimeService aufgerufen wird, wird ein vorhandener Lease für das Objekt zurückgegeben. Wenn kein Lease vorhanden ist, wird ein neuer Lease zurückgegeben. Die Leaseeigenschaften können nur bei Rückgabe eines neuen Lease festgelegt werden. Sie müssen sicherstellen, dass der Status LeaseState.Initial vorliegt. Andernfalls wird eine Ausnahme ausgelöst.

Der einzige Aufruf, der Auswirkungen auf den Lebensdauerdienst hat, ist der Aufruf von InitializeLifetimeService von der .NET Remoting-Infrastruktur aus, wodurch der Lease aktiviert wird. Zwar kann anderer Code InitializeLifetimeService aufrufen und einen Lease erstellen, aber dieser Lease verbleibt so lange in seinem Anfangszustand, bis er an die .NET Remoting-Infrastruktur zurückgegeben wird. Für einen vorhandenen Lease, der sich nicht im Anfangszustand befindet, können keine neuen Werte festgelegt werden, obwohl der neue Empfänger diesen an die Infrastruktur zurückgeben kann, so dass mehrere Empfänger für ein Objekt auf denselben Lease zeigen können.

Wenn die Leasezeit 0 (Null) beträgt oder ein NULL-Lease zurückgegeben wird, wird kein Lease erstellt. Wenn RenewOnCallTime 0 (Null) ist, wird kein Empfänger, aber ein Lease erstellt. Das folgende Codebeispiel veranschaulicht eine Standardüberschreibung.

Public Class MyLifetimeControlObject
   Inherits MarshalByRefObject
   
   Public Overrides Function InitializeLifetimeService() As [Object]
      Dim lease As ILease = CType(MyBase.InitializeLifetimeService(), ILease)
      If lease.CurrentState = LeaseState.Initial Then
         lease.InitialLeaseTime = TimeSpan.FromMinutes(1)
         lease.SponsorshipTimeout = TimeSpan.FromMinutes(2)
         lease.RenewOnCallTime = TimeSpan.FromSeconds(2)
      End If
      Return lease
   End Function 'InitializeLifetimeService
End Class 'MyLifetimeControlObject
[C#]
public class MyLifetimeControlObject: MarshalByRefObject {
   public override Object InitializeLifetimeService()
   {
      ILease lease = (ILease)base.InitializeLifetimeService();
      if (lease.CurrentState == LeaseState.Initial)  {
         lease.InitialLeaseTime = TimeSpan.FromMinutes(1);
         lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
         lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
      }
      return lease;
   }
}

Die Implementierung von InitializeLifetimeService ruft normalerweise die entsprechende Methode der Basisklasse auf, um den vorhandenen Lease für das Remoteobjekt abzurufen. Wenn das Objekt zuvor nicht gemarshallt wurde, befindet sich der zurückgegebene Lease im Anfangszustand, und die Leaseeigenschaften können festgelegt werden. Nachdem das Objekt gemarshallt wurde, wechselt der Lease vom Anfangszustand in den aktiven Zustand, und jeder Versuch, die Leaseeigenschaften zu initialisieren, wird ignoriert (es wird eine Ausnahme ausgelöst). InitializeLifetimeService wird beim Aktivieren des Remoteobjekts aufgerufen. Mit dem Aktivierungsaufruf kann eine Liste der Sponsoren für den Lease bereitgestellt werden. Während der Lease aktiv ist, können auch jederzeit weitere Sponsoren hinzugefügt werden.

Siehe auch

Erneuern von Leases | Remotingbeispiel: Lebensdauer | Lebensdauer-Leases