ContentType inexperado al llamar a un WS Soap
Hola comunidad,
Tengo una clase cliente SOAP que conecta con un WS Service. Esta estructura y configuracion es la misma para varios proveedores que están integerados con mi solución.
Si llamo a un proveedor, devuelve el XML esperado. Pero hay un proveedor que lanza un error:
ERROR #6243: HTTP request to SOAP WebService returned response with unexpected CONTENT-TYPE: application/wsdl+xml
He intentado asignar el ContentType al adapter.%Client con este valor, pero no funciona.
Si lo invoco usando SOAP UI, con el mismo Soap Envelop, funciona correctamente y el Content-Type es text/xml
¿Puede ayudarme alguien?
Saludos,
Kurro Lopez
Product version: Ensemble 2017.1
$ZV: Cache for Windows (x86-64) 2017.2.1 (Build 801_3U) Thu Apr 12 2018 10:02:23 EDT
Ir a la publicación original, escrita por @Kurro Lopez
Si es un cliente el mediaType que te llega debería coincidir con alguno de los mediaType que estableces en el Accept. ¿Has probado a establecer el Accept en la llamada?
Hola David,
No se donde se establece ese valor.
El Business Operation se creó usando el wizard y lo que se modificó en los métodos, es que antes de hacer el Invoke a cada uno de los métodos del WS, modifica el namespace y el Location según a que proveedor va a realizar la consulta.
Todos los proveedores tienne la misma estructura y métodos iguales, varían el Namespace y la URL.
He probado a incluir la siguiente linea:
He invocado al proveedor directamente para que me dé el WSDL y, efectivamente, responde con un fichero wsdl+xml
A ver si con esta explicación puedes ayudar mejor.
Un saludo,
Kurro
Hola Kurro,
¿Has probado a activar el rastreo con ^ISCSOAP en pruebas?
https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...
Intenta comparar la petición completa (cabeceras incluidas) y la respuesta que obtienes para un servicio de otro proveedor que sí funciona Vs. este que te da problemas. Quizá sencillamente estés teniendo algún problema con la URL del Location que le estás pasando y por eso el WebService te devuelve el WSDL.
Hola Alberto,
Si. Utilizando el log comprobé que está realizando la invocación correctamente y los datos se estaban enviando bien. Incluso he probado el mismo SOAP que había generado para probarlo con SoapUI y hacía la consulta correctamente.
Quizá puedas comparar la petición te funciona en SoapUI Vs. la que da error en IRIS y comprobar si tienen alguna mínima diferencia en cabeceras HTTP o SOAP.
Podrías utilizar
SetHttpHeader()
para modificar las cabeceras HTTP de tu%SOAP.WebClient
https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...
O directamente cabeceras SOAP si te hicieran falta:
https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...
Esto es lo que ha devuelto el log
Nota: Por motivos de confidencialidad, se ha modificado la dirección del proveedor y algunos detalles mas, pero esta es la respuesta obtenida.
He sobreescrito el método %OnSOAPResponse para ver si obtenía algo, y ya viene con el error
entonces, no debería de ser un problema de la cabecera de salida, sino mas bién las cabeceras de entrada. ¿O es que intenta recuperar el WSDL para hacer la operación y ahí es donde está el problema?
Un saludo,
Kurro
¿Entiendo que tú sólo controlas el cliente de WebService no? (el servicio web en sí, lo controla y lo mantiene otro proveedor).
A simple vista, me parece que debe haber algo que falte o sobre en la petición SOAP de forma que hace que el servicio web no lo interprete correctamente y te devuelva el WSDL sin más.
Pero vaya, básicamente habría que investigarlo en detalle. Quizá es mejor que abras directamente un caso a soporte WRC para que puedan verlo contigo.
Nuestras redes sociales
Recursos InterSystems
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar