2008-11-13 10 views
6

J'ai un code de remoting .NET où une méthode usine, implémentée dans une classe côté serveur, renvoie des interfaces à des objets concrets, s'exécutant également sur le même serveur. Le remoting .NET crée automatiquement des proxies et me permet de passer les interfaces au client, qui peut ensuite les appeler directement.Renvoi d'une interface à partir d'un service WCF

interfaces Exemple:

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

Exemple de code client:

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

Tout cela fonctionne très bien. Cependant, maintenant j'essaye de migrer mon code à WCF. Je me demande s'il existe un moyen de contourner les interfaces et que WCF génère les proxies à la volée sur le client, tout comme le remoting .NET d'origine.

Et je ne veux pas renvoyer d'instances de classe, puisque je ne veux pas exposer de vraies classes. Et sérialiser l'instance complète et l'envoyer entre le serveur et le client n'est pas une option non plus. Je veux juste que le client parle à l'objet serveur via un pointeur/proxy d'interface.

Des idées?

Répondre

0

La classe ChannelFactory fait exactement cela, génère dynamiquement un proxy au moment de l'exécution étant donné une interface.

1

Désolé, jezell, je ne comprends pas.

Oui, je peux utiliser ChannelFactory sur le client pour créer un proxy à IFactory, puisque cet objet singleton a été "publié" par le serveur via un URI sur le ServiceHost.

Mais mes instances IFoo sur le serveur n'ont été associées à aucun ServiceHost; Je veux juste les récupérer en appelant mon proxy IFactory sur le client, et laisser WCF faire l'appel au serveur IFactory, qui fournirait quelques IFoo, qui seraient ensuite ramenés au client et enveloppés dans un proxy généré dynamiquement. Je veux juste être en mesure d'écrire factory.GetFoo(); sur mon client ...

En attendant, Brian m'a montré un document très intéressant que j'avais oublié sur MSDN, qui explique comment mimmick l'interface .NET Remoting marshalling par en utilisant des sessions et EndPointAddress10 et ... comme vous l'avez écrit, ChannelFactory pour obtenir les proxies côté client. Donc, maintenant je sais comment répliquer mon code de remoting .NET, mais en payant un coût relativement élevé. La complexité du code impliquée avec WCF est un peu plus élevée qu'avec l'ancienne solution d'accès distant .NET.