Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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