2008-11-13 21 views
6

Tengo un código remoto de .NET donde un método de fábrica, implementado en alguna clase de servidor, devuelve interfaces a objetos concretos, ejecutándose también en el mismo servidor. .NET remoting crea automáticamente proxies y me permite pasar las interfaces al cliente, que luego puede llamarlas directamente.Devolver una interfaz desde un servicio WCF

las interfaces Ejemplo: código de cliente

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

Ejemplo:

... 
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url); 
... 
IFoo foo = factory.GetFoo(); // the server returns an interface; we get a proxy to it 
foo.DoSomething(); 
... 

Todo esto funciona muy bien. Sin embargo, ahora estoy tratando de migrar mi código a WCF. Me pregunto si hay un medio para pasar las interfaces y tener WCF generar los proxies sobre la marcha en el cliente, al igual que el .NET remoting original.

Y no quiero devolver instancias de clase, ya que no quiero exponer clases reales. Y serializar la instancia completa y enviarla de un lado a otro entre el servidor y el cliente tampoco es una opción. Realmente solo quiero que el cliente hable con el objeto servidor a través de un puntero/proxy de interfaz.

¿Alguna idea?

Respuesta

0

La clase ChannelFactory hace exactamente esto, genera un proxy dinámicamente en el tiempo de ejecución dada una interfaz.

1

Lo sentimos, jezell, yo no lo entiendo.

Sí, puedo usar ChannelFactory en el cliente para crear un proxy para IFactory, ya que ha sido objeto singleton "publicada" por el servidor a través de un URI en la ServiceHost.

Pero mis instancias IFoo en el servidor no se han asociado con ninguna ServiceHost; Solo quiero recuperarlos llamando a mi proxy IFactory en el cliente y dejar que WCF haga la llamada al servidor IFactory, que proporcionaría algunos IFoo, que luego se redirigirían al cliente y se envolverían en un proxy generado dinámicamente. Realmente solo quiero poder escribir factory.GetFoo(); en mi cliente ...

Mientras tanto, Brian me señaló un documento muy interesante que había pasado por alto en MSDN, que explica cómo imitar la interfaz de .NET Remoting que reúne por usando sesiones y EndPointAddress10 y ... como escribió, ChannelFactory para obtener los proxies del lado del cliente.

Por lo tanto, ahora sé cómo replicar mi código .NET remoto, pero pagar un costo relativamente alto para él. La complejidad del código involucrada con WCF es bastante más alta que con la simple solución de comunicación remota de .NET.

Cuestiones relacionadas