Ho iniziato a scrivere un'interfaccia per le API del servizio Web di FedEx. Hanno 3 diverse API a cui sono interessato; Valuta, spedisci e traccia. Sto generando i proxy di servizio con SvcUtil.exe.Tipi di coercizione in diversi spazi dei nomi con layout identico in C#
I diversi endpoint del servizio sono specificati da FedEx nei rispettivi file WSDL. Ogni endpoint del servizio ha il proprio namespace XML (ad esempio http://fedex.com/ws/rate/v5 e http://fedex.com/ws/ship/v5)
Gli endpoint del servizio faccio uso di un bel paio di tipi identici come l'indirizzo, misure, peso, AuthenticationDetail, ClientDetail, ecc ...
E qui è dove si trova il problema, posso fornire tutti i file WSDL contemporaneamente a SvcUtil.exe e normalmente convergerebbe tutti i tipi identici in un singolo tipo condiviso, ma poiché ciascuno dei servizi di FedEx è nel proprio spazio dei nomi, e redeclare questi tipi in ogni file WSDL sotto quello spazio dei nomi, invece, sono un indirizzo, indirizzo1 e indirizzo2 uno per ogni spazio dei nomi.
Per risolvere il problema, ciò che faccio ora è eseguire separatamente ogni WSDL tramite svcutil e inserirli ciascuno nel proprio spazio dei nomi .NET (ad esempio FedEx.Rate, FedEx.Ship, FedEx.Track). Il problema con questo è che ora ho un tipo di indirizzo distinto in ogni spazio dei nomi (FedEx.Rate.Address, FedEx.Ship.Address).
Ciò rende difficile generalizzare il codice utilizzato tra i servizi come un metodo factory GetAuthenticationDetail() in modo da non dover ripetere quel codice in ogni luogo in cui utilizzo i diversi servizi.
Esiste un modo in C# per forzare FedEx.Rate.Address a FedEx.Ship.Address?
+1 per la domanda. Sto lottando con lo stesso problema e non ho mai trovato una soluzione piacevole. –
Ottima domanda; Ho pensato che stavo importando il WSDL in modo errato, finché non ho guardato più vicino e sì, hanno davvero assegnato diversi spazi dei nomi a tipi identici. –