Empecé a escribir una interfaz para las API de servicio web de FedEx. Tienen 3 API diferentes que me interesan; Tasa, envío y seguimiento. Estoy generando los proxies de servicio con SvcUtil.exe.Tipos de coerción en diferentes espacios de nombres con diseño idéntico en C#
FedEx especifica los diferentes puntos finales del servicio en sus propios archivos WSDL. Cada extremo de servicio tiene su propio espacio de nombres XML (por ejemplo http://fedex.com/ws/rate/v5 y http://fedex.com/ws/ship/v5)
Los puntos finales de servicios hacen uso de un buen número de tipos idénticos, tales como la dirección, de Medidas, peso, AuthenticationDetail, ClientDetail, etc ...
Y aquí es donde reside el problema, puedo proporcionar todos los archivos WSDL al mismo tiempo a SvcUtil.exe y normalmente combinaría cualquier tipo idéntico en un único tipo compartido, pero como cada uno de los servicios de FedEx está en su propio espacio de nombres, y redeclaran estos tipos en cada archivo WSDL bajo ese espacio de nombre con el que termino en cambio es una Dirección, una Dirección1 y una Dirección una para cada espacio de nombres.
Para resolver ese problema, lo que hago ahora es ejecutar cada WSDL a través de svcutil por separado y ponerlos cada uno en su propio espacio de nombres .NET (por ejemplo, FedEx.Rate, FedEx.Ship, FedEx.Track). El problema con esto es que ahora tengo un tipo de dirección distinto en cada espacio de nombre (Fedex.Rate.Address, FedEx.Ship.Address).
Esto dificulta la generalización del código utilizado entre los servicios, como el método de fábrica GetAuthenticationDetail(), por lo que no tengo que repetir ese código en todos los lugares donde utilizo los diferentes servicios.
¿Hay alguna forma en C# de forzar FedEx.Rate.Address a FedEx.Ship.Address?
+1 para la pregunta. Estoy luchando con el mismo problema y nunca encontré una buena solución. –
Gran pregunta; Pensé que había estado importando el WSDL incorrectamente, hasta que miré más de cerca y sí, realmente asignaron diferentes espacios de nombres a tipos idénticos. –