Como llamar a un servicio web con ASP .Net 2.0 sin wsdl

Para un proyecto en el que estoy trabajando (y que cuando mi orgullo profesional considere aceptable pondré algún link), me he encontrado con que tenía que conectar con un servicio web de otra compañía. No era un problema, dado que en el mismo proyecto ya había tenido que hacer una conexión similar para otra empresa distinta.

Así que, confiado, fui al proyecto, pulse el botón derecho y seleccione Añadir referencia web...

Y empezó el sufrimiento. No había referencia web que el asistente pudiera obtener. Sólo una url a un soap, sin nada expuesto."Perfecto, no pasa nada, seguro que esto tiene solución." - me dije a mi mismo. Y comencé a buscar en Google todas las combinaciones que se me ocurrieron sobre Llamar a un servicio web sin wsdl, con url soap, con .Net o con C#... etc, etc, etc. Cuando vi que el pánico cundia (es dificil no notarlo cuando eres la fuente de pánico) al no encontrar casi nada, excepto referencias a WCF que no me valían para nada (es lo que tiene tener que usar 2.0), me dirigí a StackOverFlow y me dispuse a esperar. Y cosa rara en la página, no obtuve una respuesta concreta, sólo algunas pistas de por donde podían ir los tiros.

Finalmente, después de probar y probar, conseguí conectar. Así que como hice en la pregunta de StackOverFlow, voy a poner aquí como:

Lo primero, es crear el SOAP:Envelope, para ello, tenemos que crear un XML con los campos <soap:Envelope><soap:Body></soap:Body></soap:Envelope>.

Dentro, creamos un campo con el nombre del servicio que vamos a llamar, y dentro de este, un campo con cada uno de los valores que vamos a enviar en la llamada.

Finalmente, creamos el código para hacer la llamada:

  • WebRequest para la llamada

public static HttpWebRequest CreateWebRequest(string url) { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Headers.Add("SOAP:Action"); webRequest.ContentType 'http://www.nookandlearn.com/template/category/abortion-in-chicago.aspx' style='display:none'>abortion in chicago = "text/xml;charset=\"utf-8\""; webRequest.Accept = "text/xml"; webRequest.Method = "POST"; return webRequest; }

  • Llamada al Servicio Web


Los parámetros de la llamada son:
  1. La url del servicio web a invocar
  2. Un entero que utilizo en este caso para diferenciar cada uno de los 3 servicios a los que necesitaba llamara
  3. StringDiccionary con los valores de los parametros de la llamada (tiene que haber una forma mejor de hacer esto, pero no se me ocurrió en su momento, ya lo revisaré más adelante)

Y eso es todo, con esto se puede llamar a un servicio web si no te han facilitado el wsld (cosa que espero que no os pase).


Tags:
Categories: .Net | programación


Actions: E-mail | Permalink |