Renouvellement des baux
Une fois un bail créé, la seule propriété du bail qui peut être modifiée est ILease.CurrentLeaseTime. Il existe deux façons de renouveler un bail : un client peut appeler ILease.Renew directement, ou un sponsor peut être contacté pour une demande de renouvellement de bail.
Un client peut obtenir le bail et l'étendre directement comme le montre l'exemple de code suivant.
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));
Sponsors
Les sponsors écoutent les requêtes d'un domaine d'application hôte sur l'intention du sponsor de renouveler un bail de durée de vie d'un objet particulier. Les sponsors implémentent ISponsor et sont inscrits à l'aide du gestionnaire de bail en obtenant une référence au bail puis en appelant ILease.Register. En général, pour les cas où il existe plusieurs clients par objet distant, il est plus efficace que l'objet distant demande un renouvellement de bail à un des clients plutôt que tous les clients exécutent la commande Ping sur l'objet distant.
Remarque À partir de la version 1.1 du .NET Framework, l'inscription d'un sponsor pour participer à la durée de vie d'un objet serveur nécessite le paramètre de désérialisation automatique Full de la part du domaine d'application serveur et du sponsor. Pour plus d'informations, consultez Désérialisation automatique dans .NET Remoting.
L'utilisation des sponsors fournit également une stratégie de renouvellement dynamique parmi un grand nombre de clients. Cela pourrait s'avérer efficace pour résoudre des problèmes parallèles où plusieurs clients donnent à plusieurs objets distants un problème à résoudre. Lorsqu'un objet distant retourne une solution, le sponsor est notifié et autorise l'expiration de tous les autres baux d'objet distant.
Cette approche est également utile pour faire migrer des objets distants car l'objet distant contacte le client à partir de son emplacement au lieu que le client soit obligé de trouver l'objet.
Il est également important de remarquer que le sponsor risque d'être difficilement accessible s'il se trouve sur un réseau de grande taille ou encore sur Internet avec de nombreux pare-feu. Vous pouvez contourner ce problème en utilisant des sponsors de sauvegarde ou en plaçant les sponsors près du domaine d'application hôte où ils peuvent être accessibles avec un certain niveau de confiance.
Le gestionnaire de bail du domaine d'application hôte maintient une liste des sponsors. Lorsqu'un sponsor est nécessaire pour le renouvellement de la durée du bail, le sponsor au début de la liste est appelé pour renouveler la durée. Si le sponsor ne répond pas dans l'intervalle de temps ILease.SponsorshipTimeout, il est supprimé de la liste et le sponsor suivant dans la liste est appelé.
Utilisation d'un sponsor pour renouveler un bail
Les sponsors participent aux baux de durée de vie en obtenant le bail pour une référence d'objet particulier s'inscrivant eux-mêmes sous la forme de sponsor et en attendant que le gestionnaire de bail distant appelle ISponsor.Renewal. Un bail d'objet s'obtient en appelant RemotingServices.GetLifetimeService qui passe l'objet nécessitant le bail en tant que paramètre. Cet appel est une méthode static de la classe RemotingServices. Si l'objet est local dans le domaine d'application, le paramètre de cet appel représente une référence locale à l'objet et le bail retourné est une référence locale au bail. Si l'objet est distant, le proxy est passé sous la forme d'un paramètre. Remarquez que le bail lui-même est un objet marshalé par référence (MBR, Marshal-By-Reference), aussi lorsque vous obtenez un bail pour un objet distant, vous obtenez un proxy au bail. Par conséquent, lorsque vous effectuez des appels aux méthodes sur le bail, vous effectuez des appels au processus serveur.
Vous inscrivez ensuite le sponsor à l'aide du gestionnaire de bail distant en appelant ILease.Register et en passant le sponsor et un TimeSpan facultatif, si l'objet vient d'être créé.
Lorsque le bail de cet objet vient à expiration, le gestionnaire de bail peut rappeler votre sponsor distant. La valeur de retour de votre sponsor pour son implémentation de ISponsor.Renewal correspondra à la nouvelle durée du bail.
Voir aussi
<lifetime>, élément | Schéma des paramètres d'accès distant | Exemple d'accès distant : durées de vie | Baux de durée de vie | Initialisation des baux