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.
Nach dem Erstellen eines Lease kann von dessen Eigenschaften nur noch ILease.CurrentLeaseTime bearbeitet werden. Es gibt zwei Möglichkeiten zum Erneuern eines Lease: Ein Client kann ILease.Renew direkt aufrufen, oder es wird ein Sponsor kontaktiert und gebeten, den Lease zu erneuern.
Ein Client kann den Lease erhalten und direkt verlängern, wie das folgende Codebeispiel verdeutlicht.
Dim obj As New RemoteType()
Dim lease As ILease = CType(RemotingServices.GetLifetimeService(obj), ILease)
Dim expireTime As TimeSpan = lease.Renew(TimeSpan.FromSeconds(20))
[C#]
RemoteType obj = new RemoteType();
ILease lease = (ILease)RemotingServices.GetLifetimeService(obj);
TimeSpan expireTime = lease.Renew(TimeSpan.FromSeconds(20));
Sponsoren
Sponsoren warten auf Abfragen von einer Hostanwendungsdomäne in Bezug darauf, ob der Sponsor den Lebensdauer-Lease eines bestimmten Objekts verlängern möchte. Sponsoren implementieren ISponsor und werden beim Lease-Manager registriert, indem sie einen Verweis auf den Lease erhalten und dann ILease.Register aufrufen. Wenn es viele Clients pro Remoteobjekt gibt, ist es i. d. R. effizienter, wenn das Remoteobjekt einen der Clients um Leaseerneuerung bittet, als wenn alle Clients Ping-Signale an das Remoteobjekt senden.
Hinweis Ab Version 1.1 von .NET Framework ist für das Registrieren eines Sponsors zur Teilnahme an der Lebensdauer eines Serverobjekts die automatische Deserialisierungseinstellung Full sowohl für die Serveranwendungsdomäne als auch für den Sponsor erforderlich. Weitere Informationen finden Sie unter Automatische Deserialisierung in .NET Remoting.
Mit Sponsoren wird bei vielen Clients auch eine dynamische Erneuerungsrichtlinie bereitgestellt. Das könnte sich positiv auf die parallele Problemlösung auswirken, bei der mindestens ein Client mehreren Remoteobjekten die Lösung eines Problems überlassen könnte. Wenn ein Remoteobjekt eine Lösung zurückgibt, wird der Sponsor benachrichtigt, der dann allen anderen Remoteobjektleases das Ablaufen ermöglicht.
Dieser Ansatz erweist sich auch beim Migrieren von Remoteobjekten als nützlich, da hier das Remoteobjekt den Client von seiner aktuellen Position aus kontaktiert, anstatt den Client das Objekt suchen zu lassen.
Außerdem sollte beachtet werden, dass der Sponsor u. U. schwer zugänglich ist, wenn dieser sich in einem großen Netzwerk bzw. auch im Internet mit vielen Firewalls befindet. Dieses Problem können Sie durch Backupsponsoren umgehen, oder indem Sie die Sponsoren nahe an der Hostanwendungsdomäne platzieren, so dass diese relativ zuverlässig zu erreichen sind.
Der Lease-Manager der Hostanwendungsdomäne verwaltet eine Liste der Sponsoren. Wenn ein Sponsor zum Erneuern der Leasezeit erforderlich ist, wird der Sponsor am Anfang der Liste aufgefordert, diese zu erneuern. Wenn der Sponsor nicht innerhalb der ILease.SponsorshipTimeout-Zeitspanne antwortet, wird er aus der Liste entfernt, und der nächste Sponsor in der Liste wird aufgerufen.
Verwenden eines Sponsors zum Erneuern eines Lease
Sponsoren ist die Teilnahme an Lebensdauer-Leases möglich, indem sie den Lease für einen bestimmten Objektverweis beziehen, sich selbst als Sponsor registrieren und darauf warten, dass der Remotelease-Manager ISponsor.Renewal aufruft. Sponsoren erhalten einen Objektlease durch Aufrufen von RemotingServices.GetLifetimeService, wobei das Objekt, für das der Lease erforderlich ist, als Parameter übergeben wird. Dieser Aufruf ist eine statische Methode der RemotingServices-Klasse. Befindet sich das Objekt lokal in der Anwendungsdomäne, stellt der Parameter für diesen Aufruf einen lokalen Verweis auf das Objekt dar. Somit stellt der zurückgegebene Lease einen lokalen Verweis auf den Lease dar. Wenn das Objekt remote ist, wird der Proxy als Parameter übergeben. Der Lease selbst ist ein MBR (Marshal-by-Reference)-Objekt, d. h., Sie erhalten einen Proxy für den Lease, wenn Sie einen Lease für ein Remoteobjekt erhalten. Daher führen Sie eigentlich Remoteaufrufe des Serverprozesses durch, wenn Sie die Methoden für den Lease aufrufen.
Anschließend registrieren Sie den Sponsor beim Remotelease-Manager, indem Sie ILease.Register aufrufen und den Sponsor und ein optionales TimeSpan-Objekt übergeben, sofern das Objekt gerade erstellt worden ist.
Wenn der Lease für das Objekt abläuft, führt der Lease-Manager möglicherweise einen Rückrufruf an den Remotesponsor durch. Der Rückgabewert des Sponsors für die Implementierung von ISponsor.Renewal wird die neue Leasezeit.
Siehe auch
<lifetime>-Element | Schema für Remoteeinstellungen | Remotingbeispiel: Lebensdauer | Lebensdauer-Leases | Initialisieren von Leases