El caso de la TypeEntry vacía


Hace poco encontramos un extraño problema en un smart client conectado a través de remoting a las reglas de negocio. El caso es que utilizamos la clase RemotingHelper de Ingo Rammer para facilitar el modo en que se acceden a las reglas de negocio, pero tenemos un interfaz que no se encuentra registrado en el app.config sino que lo registramos dinámicamente durante el incio del programa llamando a:

RegisterWellKnownClientType(typeof(IMyInterface), url);

A pesar de que el susodicho método no da ningún error, al hacer una llamada al método RemotingConfiguration.GetRegisteredWellKnownClientTypes() el objeto WellKnownClientTypeEntry que se corresponde con el registro anterior tiene un null en su propiedad ObjectType!!!

Tras investigar un poco y gracias al fuslogvw.exe descubrimos que la configuración de remoting no encontraba la librería que contenía el interfaz porque ésta estaba en el GAC y no en la carpeta de la aplicación y el registro de entradas de cliente no la encontraba.

Para conseguir que lo anterior funcione existen dos alternativas:

a) Copiar siempre la librería a la carpeta del ejecutable.
b) Indicar al registro que también hay que buscar la librería en el GAC.

Para la opción b (la buena) el truco está en crear la entrada manualmente usando el FullName de la librería, que contiene la versión y clave pública con la que se puede realizar la búsqueda en el GAC, con el siguiente código:

WellKnownClientTypeEntry entry=new WellKnownClientTypeEntry(
typeof(IMyInterface).FullName,typeof(IMyInterface).Assembly.FullName,commonBusinessUrl);
RemotingConfiguration.RegisterWellKnownClientType(entry);

Así el registro se encargará de buscar la librería en el GAC si hace falta.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s