Compartir a través de


Renovar concesiones

Una vez creada una concesión, la única propiedad de la misma que se puede alterar es ILease.CurrentLeaseTime. Hay dos formas de renovar una concesión: o bien un cliente llama a ILease.Renew directamente o bien se llama a un patrocinador y se le pide que renueve la concesión.

Un cliente puede obtener la concesión y extenderla directamente según se indica en el ejemplo de código siguiente.

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

Patrocinadores

Los patrocinadores están atentos por si un dominio de aplicación host les pregunta si desean extender la concesión del período de duración de un determinado objeto. Los patrocinadores implementan ISponsor y se registran en el administrador de concesiones, para lo que obtienen una referencia a la concesión y después llaman a ILease.Register. En general, cuando hay muchos clientes por cada objeto remoto, resulta más eficaz que el objeto remoto pida a uno de los clientes la renovación de su concesión, en lugar de que todos los clientes hagan ping al objeto remoto.

Nota   Empezando con la versión 1.1 de .NET Framework, el registro de un patrocinador para que pueda participar en la vida útil de un objeto servidor requiere que se establezca la deserialización automática en Full en el dominio de aplicación del servidor y el patrocinador. Para obtener más información, vea Deserialización automática en .NET Remoting.

El uso de patrocinadores también permite utilizar una táctica de renovación dinámica entre un número elevado de clientes. Esta táctica podría resultar eficaz para la solución de problemas en paralelo, donde uno o varios clientes podrían pasar a varios objetos remotos un problema que debe solucionarse. Cuando un objeto remoto devuelve una solución, se informa al patrocinador y las concesiones del resto de los objetos remotos pueden vencer.

Este enfoque también resulta útil para objetos remotos que migran, puesto que el objeto remoto se pone en contacto con el cliente desde su ubicación actual, en vez de ser el cliente el que tenga que encontrarlo.

También es importante resaltar que puede resultar difícil llegar al patrocinador si está ubicado en una red de gran tamaño o incluso en Internet con muchos servidores de seguridad. Se puede solucionar este problema teniendo patrocinadores de reserva o colocando los patrocinadores cerca del dominio de aplicación host, donde hay más posibilidades de ponerse en contacto con ellos.

El administrador de concesiones del dominio de aplicación host mantiene una lista de patrocinadores. Cuando hace falta un patrocinador para renovar la duración de una concesión, se pregunta al primero de la lista. Si no responde en el intervalo especificado en ILease.SponsorshipTimeout, se quita el patrocinador de la lista y se llama al siguiente.

Usar un patrocinador para renovar una concesión

Los patrocinadores participan en las concesiones de períodos de duración de la siguiente manera: obtienen la concesión para una determinada referencia a un objeto, se registran como patrocinadores y esperan a que el administrador remoto de concesiones llame a ISponsor.Renewal. Para obtener una concesión para un objeto, se llama a RemotingServices.GetLifetimeService, con lo que se pasa como parámetro el objeto para el que se solicita la concesión. La llamada es un método estático de la clase RemotingServices. Si el objeto es local en el dominio de aplicación, el parámetro de esta llamada es una referencia local al objeto y la concesión devuelta es una referencia local a la concesión. Si el objeto es remoto, se pasa el proxy como parámetro. Hay que tener en cuenta que la concesión propiamente dicha es un objeto MBR (Marshal-By-Reference, cálculo por referencia), por lo que cuando se obtiene una concesión para un objeto remoto, se obtiene un proxy de la concesión. Por lo tanto, cuando realiza llamadas a los métodos de la concesión, realiza llamadas remotas al proceso del servidor.

A continuación puede registrar el patrocinador con el administrador remoto de concesiones, para lo que debe llamar a ILease.Register y pasar el patrocinador y un objeto TimeSpan opcional si el objeto se creó recientemente.

Cuando la concesión para este objeto venza, el administrador de concesiones podría devolver la llamada a su patrocinador remoto. El valor devuelto por su patrocinador para su implementación de ISponsor.Renewal pasará a ser la nueva duración de la concesión.

Vea también

Elemento <lifetime> | Esquema de la configuración de la interacción remota | Ejemplo de interacción remota: Períodos de duración | Concesiones del período de duración | Inicializar concesiones