2011-04-18 7 views
0

Notre API tierce fournit deux services Web différents, mais possède des méthodes et des modèles identiques. Néanmoins, ils ne diffèrent que sur URIs (Service Web Chemin, Chemin d'action [contrat d'exploitation]Contrat d'exploitation avec une source ou une action différente Url

J'ai donc décidé de:.

  1. Générez le code de leur wsdl en utilisant VS.

  2. Modifier le namespacing à utiliser le même et d'être "commun" et ne pas utiliser la référence de service à la place, j'utilise le code édité Reference.cs

  3. Créer un nouveau proxy qui gérera l'adresse URI correcte du service à utiliser (enveloppé le Refer ence.cs à l'intérieur de celui-ci).

Maintenant, j'ai un problème avec le "Method1", car ils ont un nom d'action différent. Ayant une exception:

"Le serveur ne reconnaît pas la valeur de en-tête HTTP SOAPAction: http://www.api.com/service/Method1"

Je remarque juste que le nom de l'action correcte est: http://www.api.com/service1/Method1

Le question est maintenant, est-il une configuration ou un comportement que je peux utiliser pour corriger le nom de l'action pour chaque méthode pour chaque service? Ou bien, tant qu'ils continuent à ajouter des contrats pour chaque implémentation de l'API, je devrais aussi continuer à ajouter les contrats pour chacun, et utiliser simplement ChannelFactory pour cela?

S'il vous plaît, aidez, merci.

Répondre

1

Je fini par utiliser directement le ChannelFactory face au même problème

Dans ma mise en œuvre, j'avais une interface de base qui avait toutes les méthodes communes aux 2 API. Puis j'ai eu 2 intefaces séparés - un pour chaque version API tierce partie - qui hérite de l'interface de base et ajoute des méthodes et [OperationContract] attributs qui ont varié entre les deux implémentations. Lors de l'instanciation ChannelFactory<>, j'ai utilisé l'une des interfaces enfants. Contribué à garder le code du consommateur propre et maintenable

+0

Merci pour cela, il est clair que ChannelFactory est le bon pour ici. Quand vous dites que vous avez utilisé l'une des interfaces enfants, cela signifie-t-il ci-dessous? 'l'interface base' ' l'interface API1: base' 'Interface api2: base' ' 'ChannelFactory ' Est-ce exact? Je me demande juste parce que je finis par utiliser les contrats séparés lors de la création de l'instance du ChannelFactor . –

Questions connexes