Rinnovo dei lease

Dopo la creazione di un lease è possibile modificarne un'unica proprietà, ILease.CurrentLeaseTime. È possibile rinnovare un lease in due modi: un client può chiamare direttamente ILease.Renew oppure è possibile contattare uno sponsor e richiedere il rinnovo del lease.

Un client può ottenere il lease ed estenderlo direttamente, come mostrato nell'esempio di codice riportato di seguito.

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));

Gli sponsor attendono da un dominio applicazione host le query relative all'eventuale estensione del lease di durata di un determinato oggetto. Consentono di implementare ISponsor e vengono registrati con il gestore di lease ottenendo un riferimento al lease e chiamando ILease.Register. Nel caso in cui siano presenti molti client per oggetto remoto è in genere più efficiente se l'oggetto remoto richiede un rinnovo di lease a uno dei client piuttosto che tutti i client eseguano il ping sull'oggetto remoto.

Nota   A partire dalla versione 1.1 di .NET Framework, la registrazione di uno sponsor per consentirne la partecipazione alla durata di un oggetto server richiede l'impostazione di deserializzazione automatica Full sia per il dominio applicazione server che per lo sponsor. Per informazioni dettagliate, vedere Deserializzazione automatica in .NET Remoting.

L'utilizzo di sponsor offre anche un criterio di rinnovo dinamico tra più client, il che può agevolare la risoluzione di problemi paralleli, dove uno o più client forniscono un problema da risolvere a più oggetti remoti. Quando viene restituita una soluzione da un oggetto remoto, lo sponsor riceve la notifica e consente la scadenza di tutti gli altri lease di oggetti remoti.

Tale approccio risulta utile anche per la migrazione di oggetti remoti, perché non è il client a dover trovare l'oggetto remoto, ma è quest'ultimo che contatta il client dal percorso corrente.

È importante, inoltre, notare che lo sponsor potrebbe essere difficilmente raggiungibile, se si trova in una rete di grandi dimensioni o su Internet con molti firewall. È possibile risolvere il problema mediante l'impiego di sponsor di backup o collocando gli sponsor vicino al dominio applicazione host dove possono essere raggiunti più agevolmente.

Il gestore di lease del dominio applicazione host gestisce un elenco degli sponsor. Quando occorre uno sponsor per il rinnovo del tempo di lease, tale operazione viene richiesta al primo sponsor dell'elenco. Se non viene inviata alcuna risposta nell'intervallo di tempo stabilito da ILease.SponsorshipTimeout, lo sponsor viene rimosso dall'elenco e viene chiamato quello successivo.

Utilizzo di uno sponsor per il rinnovo di un lease

Il ruolo degli sponsor nei lease di durata consiste nell'ottenere il lease per un determinato riferimento a un oggetto, nel registrarsi come sponsor e nell'attendere un gestore di lease remoto per chiamare ISponsor.Renewal. Un lease di oggetto viene ottenuto con la chiamata a RemotingServices.GetLifetimeService, passando come parametro l'oggetto per il quale è richiesto il lease. Si tratta di un metodo static della classe RemotingServices. Se l'oggetto è locale sul dominio applicazione, il parametro a questa chiamata è un riferimento locale all'oggetto e il lease restituito è un riferimento locale al lease. Se l'oggetto è remoto, il proxy viene passato come parametro. Poiché il lease stesso è un oggetto MBR, quando si ottiene un lease per un oggetto remoto si ottiene un proxy sul lease. Quando si effettuano chiamate ai metodi sul lease, pertanto, si effettuano chiamate remote al processo server.

La registrazione viene quindi effettuata con il gestore di lease remoto chiamando ILease.Register e passando lo sponsor e un oggetto TimeSpan opzionale, se l'oggetto è stato appena creato.

Quando scade il lease per l'oggetto, è possibile che il gestore di lease chiami di nuovo lo sponsor remoto. Il valore restituito dello sponsor per l'implementazione di ISponsor.Renewal diventa il nuovo tempo di lease.

Vedere anche

Elemento <lifetime> | Schema delle impostazioni remote | Esempio di comunicazione remota: durata | Lease di durata | Inizializzazione dei lease