Me encuentro con un problema muy frustrante. Todas las respuestas XML del servicio se incluyen en el mismo elemento ("respuesta"). Por ejemplo, si inicio sesión, obtendré una "respuesta", no una "Respuesta de inicio de sesión". Si busco algo, también obtendré "respuesta", no "respuesta de búsqueda".
Todas las respuestas tienen esta estructura:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <response method="methodName"> <payload> ** other elements** </payload> </response> </S:Body> </S:Envelope>¿Por qué es esto un problema? Bueno, todas mis clases de proxy esperan que un elemento se deserialice, como tal:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:xxx-premium#xxxLogin", Use=System.Web.Services.Description.SoapBindingUse.Literal,ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] [return: System.Xml.Serialization.XmlElementAttribute("response", Namespace="")] **random method**El problema es que, si todos los nombres de los elementos tienen el mismo nombre, obtendré una excepción como:
InvalidOperationException: el elemento XML superior 'respuesta' del espacio de nombres 'hace referencia a tipos distintos
Tiene sentido, ya que este mecanismo utiliza la reflexión. La respuesta XML tampoco tiene espacio de nombres.
Para su información: usé el antiguo wsdl.exe (referencia web) ya que usar Svcutil no funcionó.
Al ejecutar pruebas de aserción en SoapUI, también recibí un mensaje de "cumplimiento de esquema: FALLIDO".
Obviamente, cambiar el nombre en el código proxy hará que la respuesta sea nula.
¿Hay una solución a esto o la única opción es contactar al proveedor para cambiar su pesadilla de un servicio?