2010-09-27 2 views
1

J'ai plusieurs services dans mon application. WebService1, WebService2, WebService3, etc.Utilisation de plusieurs services wcf, classe d'usine pour retourner le proxyclient

Tous les services ont les mêmes méthodes, mais ils sont hébergés sur des adresses IP différentes.

Maintenant, lorsqu'un client appelle un methodA (1), puis

WebService1Client.Method() doit être appelée;

Le client appelle une méthode A (2), puis WebService2Client.Method() doit être appelé.

Je ne veux pas faire un cas de commutation pour chaque fonction sur le client.

Je préférerais plutôt créer une classe/méthodes qui retournerait le proxyClient approprié.

Comment puis-je créer une classe pour renvoyer l'objet et continuer à utiliser cet objet.

Veuillez me diriger vers quelques exemples de codes ou de références.

Merci

Répondre

1

Si tous vos services mettent en œuvre le même marché (je veux dire exactement la même chose, pas un contrat avec les mêmes méthodes), vous pouvez simplement créer des procurations en utilisant la classe ChannelFactory et jettent l'objet retourné dans l'interface du contrat.

Cela devrait vous donner le comportement générique attendu. Une manière de s'assurer que la même interface est utilisée est de la placer dans une bibliothèque de classes séparée et de la partager entre tous les projets. Assurez-vous de configurer vos références de service pour réutiliser les types dans les assemblys référencés.

EDIT: Voici comment vous pouvez utiliser la ChannelFactory, vous pouvez vous débarrasser de la référence de service:

BasicHttpBinding myBinding = new BasicHttpBinding(); 
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1"); 
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint); 
+0

Que voulez-vous dire en mettant en œuvre le même marché? Le service WCF sera fondamentalement identique. Sauf qu'ils sont hébergés sur des machines différentes. Comment les services peuvent-ils mettre en œuvre le même contrat? Extraire l'interface à une bibliothèque de classes/dll partagée et ensuite utiliser cette interface pour implémenter les services? Est-ce ce que vous suggérez? – xaria

+0

En effet, c'est exactement ce que j'ai suggéré dans la dernière partie de ma réponse –

+0

Merci Johann, Pourriez-vous me montrer quelques exemples sur l'utilisation de la classe Factory. – xaria

0

Je ne suis pas tout à fait sûr pourquoi vous voulez envelopper la création des procurations dans une usine. Le modèle d'utilisation le plus simple consiste à remplacer le proxy là où vous en avez besoin et chaque fois que vous en avez besoin. Lorsque vous n'exécutez pas de sessions fiables ou quelque chose d'autre, il n'y a pas beaucoup de frais généraux pour la création d'une instance de proxy. D'un autre côté, il s'assure que vous avez une connexion qui fonctionne et que le canal n'est pas dans un état défectueux. Lorsque vous utilisez le proxy, assurez-vous de le fermer lorsque vous avez terminé et annulez-le lorsqu'il déclenche une exception.

var proxy = new Proxy(); 
try { proxy.SomeMethod(); } 
catch { proxy.Abort(); } 
finally { proxy.Close(); } 
Questions connexes