Llamar a un servicio SOAP con WCF desde Postman o Fiddler

Si bien es cierto que JSON o XML es la moda desde hace mucho tiempo en servicios web, todavía existen miles y miles de servicios SOAP en la mayoría de las compañías que piso. Hoy he tenido que hacer unas pruebas con un ejemplo súper simple con WCF (de hecho, el que viene con la plantilla de WCF de Visual Studio) y lo cierto es que he estado un ratito hasta que he conseguido acceder al servicio desde Postman o Fiddler correctamente. El caso es que he probado con WCF Test client, que viene como parte de Visual Studio y funcionaba sin problemas.

WCF Test Client – SOAP service

Pero al llegar a Postman lo único que conseguía era un error 400 – Bad Request sin mucha más explicación 🙁

Postman SOAP Request – 404 Bad Request

Y en Fiddler exactamente igual:

Fiddler SOAP Request – 404 Bad Request

Después de un rato dando vueltas, he subido mi servicio a una Web App en Microsoft Azure y he probado una de las muchas páginas que actúan como cliente de SOAP, leyendo de la defición de tu servicio (WSDL), y ahí es donde he podido ver qué faltaba en mi petición para que funcionara igual de bien que en WCF Test Client: la cabecera SOAPAction, además de un Content-Length correcto en el caso de Postman. De tal modo que la configuración para poder hacer la llamada sería la siguiente:

Estas serían las cabeceras necesarias para realizar la petición:

SOAP request with parameters – headers

y este el cuerpo del mensaje:

SOAP request with parameters – body

Para Fiddler serían los mismos valores pero en su formato:

Fiddler – SOAP request

Un punto adicional a revisar es que Postman no calcula el Content-Length de manera automática como hace Fiddler y esto también puede generar problemas a la hora de realizar la petición (se queda pensando sin dar respuesta). Puedes utilizar una página como esta (o bien Fiddler que si calcula el content-length y lo actualiza solo) para calcular cuál es el tamaño del contenido y ahorrarte otros tantos minutos más.

¡Saludos!