2011-07-25 2 views
3

Possible en double:
Hosting Multiple TCP WCF service Endpoints on single PortComment exécuter plusieurs services WCF sur un port?

J'ai 4 services en cours d'exécution d'une application de service WCF, et tout fonctionne très bien si l'utilisation 4 ports séparés et est en cours d'exécution sur ma machine locale, hébergée dans une application de console. C'est bien pour le développement, mais maintenant je veux le déplacer vers une machine Server 2008 sur l'intranet, et les informaticiens ne sont pas très heureux d'ouvrir un tas de ports sur cette machine. Je sais que je peux exécuter plusieurs services sur le même port, mais je n'arrive pas à trouver quelque chose me disant comment faire. Généralement, le premier service démarre et le second ne démarre pas.

Quelqu'un peut-il me diriger vers un blog ou un article qui explique comment faire cela?

J'ai également besoin de comprendre comment héberger les services dans WAS, mais cela peut être un problème distinct. J'utilise le protocole TCP, si cela fait une différence ...

Thx, Dave

+0

Vous avez raison, c'est un doublon. Mes termes de recherche n'ont pas trouvé celui-là hier, je m'excuse ... – DaveN59

Répondre

8

Cela ressemble à cela pourrait faire l'affaire pour vous.

http://blogs.msdn.com/b/dkaufman/archive/2008/06/13/hosting-multiple-service-implementation-on-the-same-port-with-wcf.aspx

ce qui laisse supposer que vous devez configurer correctement le comportement de service et point final:

// Add behavior for Services - enable WSDL access 
ServiceMetadataBehavior serviceABehavior = new ServiceMetadataBehavior(); 
serviceABehavior.HttpGetEnabled = true; 
serviceABehavior.HttpGetUrl = new Uri("http://localhost:8080/ServiceA"); 
serviceAHost.Description.Behaviors.Add(serviceABehavior); 

ServiceMetadataBehavior serviceBBehavior = new ServiceMetadataBehavior(); 
serviceBBehavior.HttpGetEnabled = true; 
serviceBBehavior.HttpGetUrl = new Uri("http://localhost:8080/ServiceB"); 
serviceBHost.Description.Behaviors.Add(serviceBBehavior); 

// Create basicHttpBinding endpoint at http://localhost:8080/ServiceA/ 
serviceAHost.AddServiceEndpoint(serviceAContractType, new BasicHttpBinding(), 
"http://localhost:8080/ServiceA"); 
// Create basicHttpBinding endpoint at http://localhost:8080/ServiceB/ 
serviceBHost.AddServiceEndpoint(serviceBContractType, new BasicHttpBinding(), 
"http://localhost:8080/ServiceB"); 

ou le partage du port Net.TCP.

http://msdn.microsoft.com/en-us/library/ms734772.aspx

Le modèle HTTP.SYS dans lequel le trafic pour de nombreuses applications HTTP est multiplexée sur un seul port TCP est devenu standard sur la plate-forme Windows. Cela fournit un point de contrôle commun pour les administrateurs de pare-feu tout en permettant aux développeurs d'applications de minimiser le coût de déploiement de nouvelles applications pouvant utiliser le réseau.

+0

J'ai trouvé le blog de référence plus tôt hier, mais j'espérais une solution plus élégante. L'auteur admet dans son article que ce n'est pas la solution idéale, car il utilise, entre autres, des URI codés en dur au lieu d'utiliser le fichier de configuration. L'approche de partage de port semble être une meilleure solution ... – DaveN59

Questions connexes