J'ai commencé à écrire une interface pour les API webservice de FedEx. Ils ont 3 API différentes qui m'intéressent; Rate, Ship et Track. Je génère les proxies de service avec SvcUtil.exe.Types de coercition dans différents espaces de noms avec disposition identique en C#
Les différents points de terminaison de service sont chacun spécifiés par FedEx dans leurs propres fichiers WSDL. Chaque point de terminaison de service a son propre espace de noms XML (par exemple http://fedex.com/ws/rate/v5 et http://fedex.com/ws/ship/v5)
Les points d'extrémité de service n'utilisent pas mal de types identiques tels que l'adresse, mesures, poids, AuthenticationDetail, ClientDetail, etc ...
Et ici est où le problème réside, je peux fournir tous les fichiers WSDL en même temps à SvcUtil.exe et normalement il fusionnerait tous les types identiques en un seul type partagé, mais puisque chacun des services de FedEx sont dans leur propre espace de noms, et ils redéclare ces types dans chaque fichier WSDL sous cet espace de noms ce que je me retrouve à la place est une Adresse, Adresse1, et Adresse2 un pour chaque espace de noms. Pour résoudre ce problème, ce que je fais maintenant est d'exécuter chaque WSDL séparément via svcutil et de les placer chacun dans leur propre espace de noms .NET (par exemple FedEx.Rate, FedEx.Ship, FedEx.Track). Le problème avec ceci est que maintenant j'ai un type d'adresse distinct dans chaque espace de noms (Fedex.Rate.Address, FedEx.Ship.Address). Cela rend difficile la généralisation du code utilisé entre les services comme une méthode d'usine GetAuthenticationDetail(), donc je n'ai pas besoin de répéter ce code à chaque endroit où j'utilise les différents services.
Y a-t-il un moyen en C# de contraindre FedEx.Rate.Address à FedEx.Ship.Address?
+1 pour la question. Je suis aux prises avec le même problème et je n'ai jamais trouvé une bonne solution. –
Bonne question; Je pensais que j'avais importé le WSDL mal, jusqu'à ce que je regarde de plus près et oui, ils ont vraiment assigné des espaces de noms différents à des types identiques. –