Budowanie aplikacji opartej na dostawcy zewnętrznym, który ma bardzo obszerny zestaw usług SOAP (mówimy o plikach WSDL 50+). Każdy pojedynczy WSDL ma jednak wiele deklaracji współdzielonego typu. Podczas generowania kodu klienta za pomocą pliku wsdl.exe używana była flaga/sharedtypes, która łączyłaby duplikaty wpisów, jeśli typ został znaleziony kilka razy./sharedtites odpowiednik dla svcutil.exe?
Kiedy próbuję wygenerować kod klienta, zbombarduję te nakładające się typy, które trzecia strona zawiera we wszystkich plikach WSDL.
svcutil /t:code /importxmltypes [mypath]/*.wsdl
Wyniki w komunikatach o błędach odnoszących się do kolizji typu. Na przykład kilka próbek komunikatów o błędach poniżej:
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.
Nie mam kontroli nad wyjściami WSDL. Nie chcę edytować plików WSDL ręcznie z obawy przed błędem, który łamie się w sposób runtime, który byłby bardzo trudny do śledzenia z powrotem do edycji plików WSDL. Nie wspominając o tym, że istnieje 50 plików WSDL, które wahają się od 200-1200 linii XML. (Przypomnij mi jeszcze raz dlaczego myśleliśmy SOAP było wielkie zbawienie nas wszystkich z powrotem w latach 90.?)
Wszystkie wsdls są lokalne, ale nie ma to znaczenia. Moim problemem nie jest to, że nie jestem w stanie przekazać kilku plików .wsdl. Problem polega na tym, że źródło zawiera wiele typów danych w każdym pliku wsdl (lub kilku, jeśli nie wszystkich). Na przykład przeglądając pierwsze 6 nowo utworzonych wsdli, wydaje się, że 5 zawiera wpis ComplexElement dla typu o nazwie CurrencyNotation. Kiedy svcutil próbuje przeanalizować wszystkie moje wsdls, mówi, oh hej, currencyNotation już istnieje, SO SORRY. BUM. – bakasan
Tak więc mówisz, że samodzielne wpisywanie poszczególnych ścieżek wsdl będzie się zachowywać inaczej niż przejście * .wsdl (wszystkie wsdls znajdują się lokalnie). Ponieważ jest to pierwsza generacja naszych serwerów proxy, naprawdę nie mam zespołu, do którego można by się odnieść. Czy strategia ma przeanalizować jeden plik wsdl, skompilować do biblioteki DLL, a następnie odnieść do następnego? Rozwiąż dupes, a następnie spłucz i powtórz dla reszty? – bakasan
Nie był jeszcze gotowy do wypisania ścieżek do wszystkich 50 plików wsdl, ale testowanie w/tylko dwóch, svcutil foo.wsdl bar.wsdl zostało zbombardowane w/ten sam typ duplikatów wiadomości. Po rozpatrzeniu w/bóle od wsdl.exe lata temu, nie jest to zbyt pocieszające, aby zobaczyć, że svcutil.exe w tym dniu i wieku nie wydaje się dużo lepiej. : P – bakasan