Renovar las concesiones
Este tema es específico de una tecnología heredada que se mantiene para la compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas se deberían desarrollar utilizando Windows Communication Foundation (WCF).
Una vez creada una concesión, la única propiedad en la concesión que se puede modificar es ILease.CurrentLeaseTime. Hay dos formas de renovar una concesión: un cliente puede llamar directamente a ILease.Renew o se puede contactar con un patrocinador y solicitar la renovación de la concesión.
Patrocinadores
Los patrocinadores realizan escuchas para las solicitudes de un dominio de la aplicación host con el fin de extender la concesión de un objeto determinado. Los patrocinadores implementan ISponsor y se registran con el administrador de concesiones al obtener una referencia a la concesión y llamando, a continuación, a ILease.Register. En general, cuando hay muchos clientes por cada objeto remoto, resulta más eficaz que el objeto remoto envíe una solicitud a uno de los clientes para obtener una renovación de la concesión en lugar de que todos los clientes envíen las solicitudes al objeto remoto.
Nota: |
---|
Iniciándose con la versión 1.1 de .NET Framework, al registrar un patrocinador para participar en la duración de un objeto de servidor, se requiere el valor de deserialización automático Full tanto en el dominio de la aplicación del servidor como en el patrocinador. Para obtener más información, vea Deserialización automática en .NET Remoting. |
Al utilizar patrocinadores también se proporciona una directiva de renovación dinámica entre un gran número de clientes. Esto puede ser efectivo para resolver problemas paralelos, donde uno o más clientes le dan un problema para resolver a varios objetos remotos. Cuando un objeto remoto devuelve una solución, se le notifica al patrocinador y éste permite que el resto de concesiones de objetos remotas expiren.
Este enfoque también es útil para migrar los objetos remotos a un equipo diferente puesto que el objeto remoto se pone en contacto con el cliente desde su ubicación actual para que el cliente no tenga que buscarlo.
También es importante tener en cuenta que podría resultar difícil alcanzar al patrocinador si éste se encuentra en una red muy grande, o incluso en Internet, donde hay con muchos firewalls. Se puede oponer a esto si tiene patrocinadores auxiliares, o colocando a los patrocinadores cerca del dominio de la aplicación host donde se pueden localizar con un mayor grado de confianza.
El administrador del dominio de la aplicación host mantiene una lista de los patrocinadores. Cuando exigen a un patrocinador que renueve el período de duración de la concesión, piden al patrocinador de la parte superior de la lista que renueve el período de duración. Si el patrocinador no responde en el intervalo de tiempo de ILease.SponsorshipTimeout, se quita de la lista y se llama al siguiente patrocinador de la lista.
Utilizar un patrocinador para renovar una concesión
Los patrocinadores participan en los períodos de duración obteniendo la concesión para una referencia a un objeto determinada, registrándose como un patrocinador y esperando a que el administrador remoto de concesiones llame a ISponsor.Renewal. Una concesión de objeto se obtiene llamando a RemotingServices.GetLifetimeService, que toma el objeto para el que se requiere la concesión como un parámetro. Esta llamada es un método estático de la clase RemotingServices. Si el objeto es local al dominio de aplicación, el parámetro para 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, el proxy se pasa como un parámetro. Observe que la propia concesión es un objeto de cálculo por referencia (MBR), por lo que al obtener una concesión para un objeto remoto, obtiene un proxy a la concesión. Por consiguiente, al realizar las llamadas a los métodos en la concesión está convirtiendo las llamadas remotas al proceso de servidor.
A continuación, registra al patrocinador con el administrador remoto de concesiones llamando a Register y pasando al patrocinador y a un objeto TimeSpan opcional, si se acaba de crear el objeto.
Cuando expira la concesión para este objeto, el administrador de concesiones podría volver a llamar a su patrocinador remoto. El valor devuelto de su patrocinador para su implementación de Renewal se convierte en el nuevo período de concesión.
Vea también
Tareas
Referencia
<lifetime> (Elemento)
Esquema de configuración de la comunicación remota
Conceptos
Ejemplo de comunicación remota: duraciones
Concesiones de duración
Inicializar las concesiones