Construire une application qui dépend d'un fournisseur tiers qui a un ensemble très verbeux de services SOAP (nous parlons de plus de 50 fichiers WSDL). Chaque WSDL individuel a cependant de nombreuses déclarations de type partagées. Lors de la génération du code client avec wsdl.exe, il y avait un indicateur/sharedtypes qui fusionnerait les entrées dupliquées si un type avait été trouvé plusieurs fois. Lorsque je tente de générer mon code client, je bombarde sur ces types de chevauchement que le 3ème partie inclut dans tous leurs fichiers WSDL./sharedtypes équivalent pour svcutil.exe?
svcutil /t:code /importxmltypes [mypath]/*.wsdl
Résultats dans les messages d'erreur faisant allusion aux collisions de type. Par exemple, un couple d'échantillons des messages d'erreur ci-dessous:
Error: There was an error verifying some XML Schemas generated during export:
The simpleType 'http://common.soap.3rdparty.com:CurrencyNotation' has already been
declared.
Error: There was an error verifying some XML Schemas generated during export:
The complexType 'http://common.soap.3rdparty.com:NumberFormat' has already been
declared.
Je n'ai pas le contrôle de la sortie des fichiers WSDL. Je ne veux pas avoir à éditer les WSDL à la main par crainte d'une erreur qui se brise d'une manière à l'exécution, ce qui serait très difficile à retrouver dans notre édition des fichiers WSDL. Sans oublier qu'il y a 50 fichiers WSDL qui vont de 200 à 1200 lignes de XML. (Rappelle-moi pourquoi nous nous pensions que SOAP était le grand salut à tous dans les années 90 en retard?)
Tous les wsdls sont locaux, mais ce n'est pas le cas. Mon problème n'est pas que je ne suis pas capable de passer plusieurs fichiers .wsdl. Le problème est que la source a inclus plusieurs types de données dans chaque fichier wsdl (ou plusieurs, sinon tous). Par exemple, en parcourant, des 6 premiers wsdls que j'ai ouverts, il apparaît que 5 ont une entrée ComplexElement pour un type appelé CurrencyNotation. Quand svcutil essaye d'analyser tous mes wsdls, il dit, oh hé, currencyNotation existe déjà, SO SORRY. BOOM. – bakasan
Donc, vous dites que taper individuellement chaque chemin wsdl se comportera différemment que d'aller * .wsdl (tous les wsdls résident localement). Comme il s'agit de la première génération de nos proxies, je n'ai vraiment pas d'assembly à référencer. Une stratégie consisterait-elle à analyser un wsdl, à le compiler en dll, puis à le référencer pour le suivant? Résolvez les dupes, puis rincez et répétez pour le reste? – bakasan
Était pas tout à fait prêt à taper les chemins d'accès à tous les fichiers wsdl 50+, mais le test w/seulement deux, svcutil foo.wsdl bar.wsdl bombardé w/le même type de messages en double. Après avoir traité w/douleurs de wsdl.exe il ya des années, il n'est pas très réconfortant de voir que svcutil.exe dans ce jour et l'âge ne semble pas beaucoup mieux. : P – bakasan