2009-03-26 7 views
5

Je suis encore en train d'apprendre toute la chose WCF, alors s'il vous plaît laissez-moi ici. Ce que j'ai, c'est deux services hébergés en utilisant C# et VS 2008:
Service # 1 Ajoute deux nombres et renvoie le résultat.
Service # 2 Renvoie le carré d'un nombre.Comment consommer plusieurs services WCF d'un client

Je souhaite que le client puisse envoyer deux numéros au service 1, obtenir la somme, puis envoyer la somme au service 2 et obtenir le carré.

J'ai deux proxies générés pour les deux services, et je suis capable d'utiliser Intellisense, donc cette partie fonctionne.

Maintenant, comment puis-je configurer mon fichier app.config afin que je puisse communiquer avec les deux services? En ce moment, je reçois une exception chaque fois que j'essaie de le faire.

[Le client fonctionne très bien si je n'ai l'une des configurations dans le fichier application à la fois, et essaie d'appeler uniquement ce serveur.]

Je suppose que cela est une question très noobish, et la réponse c'est probablement "structurer le fichier de configuration de manière _____", mais Google ne semble pas avoir d'exemple/guide.

Quelqu'un sait-il comment faire?

Remarque: Consume multiple WCF services from one client client Bien que sonne comme un doublon n'est pas ce que je cherche.

Edit: Merci à marc_s, je l'ai travailler

Avec les deux services en cours d'exécution dans différentes applications, je ne pas besoin de diviser le fichier de configuration du serveur, mais voici ce que je l'ai fait avec la configuration client fichiers: Tout d'abord généré automatiquement les fichiers de configuration à l'aide SvrUtil.exe et les retravaillait de cette façon:

<bindings> 
    <wsHttpBinding> 

    <binding> 
    ... 
    </binding> 

    <binding> 
    ... 
    </binding> 

    </wsHttpBinding> 
</bindings> 

...

<endpoint> 

...

+0

1 - voté à vous cogner de 1,999 à 2K représentant de sorte que vous pouvez maintenant modifier d'autres réponses des gens! woot! –

+0

@Jeremy: Haha merci! Il est incroyable combien de temps il a été bloqué à 1999. – Mostlyharmless

Répondre

3

Si vous voulez exécuter les deux services sur les points limites/ports distincts, faire quelque chose comme ceci:

côté serveur:

<service name="Service1"> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" /> 
</service> 
<service name="Service2"> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" /> 
</service> 

côté client:

<client> 
    <endpoint address="http://localhost:8001/service1.asmx" 
      binding="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost:8002/service2.asmx" 
      binding="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client> 

Cela devrait vous donner deux points de terminaison individuels distincts sur le serveur et un client qui parlera aux deux.

Marc

+0

Merci, ça a marché! Il y avait tellement de permutations pour fusionner les fichiers de configuration, que j'ai juste décidé de demander, plutôt que de couvrir toutes les permutations: P – Mostlyharmless

0

Avez-vous juste un choc des critères d'évaluation? Assurez-vous que les deux services ne sont pas configurés pour écouter sur le même numéro de port par exemple. Si vous pouviez poster votre fichier de configuration (ou une version aseptisée), cela aiderait.

+0

Je les ai tous les deux fonctionnant sur le même port, mais je suis capable d'appeler le service A du service B, les deux écoutant le port 8000. Supposons que je les exécute sur différents ports, Comment structurer app.config? – Mostlyharmless

+0

Sous vous auriez plusieurs éléments et ainsi de suite. Vous ne pouvez pas simplement copier les deux sections de configuration complètes, vous devez les fusionner. –

3

Je réalise que vous avez demandé une réponse à App.Config mais que cela pourrait vous aider. Normalement, je commencerais par configurer les connexions client d'abord par programmation, car c'est plus simple, et une fois que cela fonctionne, vous pouvez le déplacer vers votre App.Config.

Voici un exemple de configuration d'un client WCF.

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress address = new EndpointAddress(serverURL); 
MyServiceClient myServiceProxy = new MyServiceClient(binding, address); 

Vous pourriez alors avoir quelque chose comme ci-dessous dans votre App.Config.

<client> 
    <endpoint address="http://localhost/service1.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService1" 
      name="Service1" /> 
    <endpoint address="http://localhost/service2.asmx" 
      binding="basicHttpBinding" 
      bindingConfiguration="basicHttpBinding" 
      contract="IService2" 
      name="Service2" /> 
</client> 
Questions connexes