Initialisation des baux
Les instances MarshalByRefObject (MBR) peuvent créer leurs propres termes de bail, ou elles peuvent être configurées pour utiliser les propriétés de bail spécifiées dans l'élément <lifetime> d'une application ou d'un fichier de configuration machine. La définition des propriétés de durée de vie ne fonctionne que lorsqu'un bail est dans son état initial, c'est-à-dire lorsqu'il est créé par un appel à InitializeLifetimeService ; les appels suivants seront sans effet.
Substitution de InitializeLifetimeService
Lorsque la méthode ILease lease = (ILease)base.InitializeLifetimeService();
est appelée dans un InitializeLifetimeService substitué, un bail existant est retourné pour l'objet ou, en l'absence d'un bail, un nouveau bail est retourné. Les propriétés de bail ne peuvent être définies que si un nouveau bail est retourné ; vous devez veiller à ce que l'état corresponde à LeaseState.Initial ou une exception sera levée.
Le seul appel qui affecte le service de durée de vie est l'appel à InitializeLifetimeService à partir de l'infrastructure .NET Remoting, ce qui active le bail. Un autre code peut appeler InitializeLifetimeService et créer un bail ; toutefois ce bail conservera son état initial jusqu'à ce qu'il soit retourné à une infrastructure .NET Remoting. Un bail existant qui n'est pas dans son état initial ne peut pas se voir assigner de nouvelles valeurs, même si le nouveau récepteur peut le retourner à l'infrastructure pour permettre à plusieurs récepteurs d'un objet de pointer vers le même bail.
Aucun bail n'est créé si la durée du bail est égale à 0 (zéro) ou si un bail null est retourné. Si RenewOnCallTime a la valeur 0 (zéro), aucun récepteur n'est créé mais un bail sera créé. L'exemple de code suivant illustre une substitution standard.
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;
}
}
L'implémentation de InitializeLifetimeService appelle normalement la méthode correspondante de la classe de base pour extraire le bail existant pour l'objet distant. Si l'objet n'a jamais été marshalé auparavant, le bail retourné est à son état initial et les propriétés de bail peuvent être définies. Une vois que l'objet a été marshalé, le bail passe de l'état initial à l'état actif et toute tentative d'initialisation des propriétés du bail sera ignorée (une exception est levée). InitializeLifetimeService est appelé lors de l'activation de l'objet distant. Une liste des sponsors pour le bail peut être fournie avec l'appel d'activation et des sponsors supplémentaires peuvent être ajoutés à tout moment lorsque le bail est actif.
Voir aussi
Renouvellement des baux | Exemple d'accès distant : durées de vie | Baux de durée de vie