J'ai un certain nombre de services WCF sur mon réseau interne qui sont hébergés par IIS 6 en utilisant basicHttpBinding. Il existe plusieurs applications existantes qui utilisent ces services en utilisant la méthode proxy "CreateChannel()".WCF Http to Tcp Proxy
Je construis une application mobile qui fonctionne en dehors de notre réseau, en utilisant une connexion cellulaire, où il est important de minimiser l'utilisation des données, donc j'essaie d'utiliser netTcpBinding au lieu de l'une des liaisons http. Mon idée est de construire un "proxy WCF", essentiellement un service qui s'exécute sur un serveur exposé à l'extérieur, écoute en utilisant une liaison net.tcp, et convertit/transmet les requêtes aux services http internes.
En ce moment, le code est très simple, il semble peu près comme ceci ...
ChannelFactory factory=new System.ServiceModel.ChannelFactory<IFooService>("FooService",new System.ServiceModel.EndpointAddress("http://internalserver/FooService.svc");
IFooService fooService=factory.CreateChannel();
ServiceHost host = new ServiceHost(fooService, new Uri[] { new Uri("net.tcp://externalserver:50001/FooService")});
Je me rends compte que ce code est très naïf à ce point, il ne tient pas compte des canaux faillées etc, mais ours avec moi. Le problème que j'ai est que l'appel GetType() sur fooService (qui est ici un proxy généré par wcf) renvoie IFooService, pas la classe du proxy. WCF n'aime pas cela lors de la création d'un nouvel hôte de service, et j'obtiens l'erreur "ce type" ne peut pas être une interface elle-même. " sur la dernière ligne.
Est-ce juste une idée horrible? Sinon, quelle est la meilleure façon de le faire fonctionner? Vais-je être obligé d'utiliser les proxies générés par svcutil?
+1, excellent post. –
Cela ressemble exactement à ce que je cherche. Il s'agit de savoir quels sont les bons mots-clés de recherche! Merci! – Brook