locked
Consumir un Metodo Web SOAP RRS feed

  • Pregunta

  • Estimados Amigos

    Debo implementar un cliente SOAP para consumir un servicio web dentro de la LAN de una empresa, la direccion que me han dado es:

    http://192.189.89.1:8080/SPYApp/SistemaExterno?wsdl

    Cuando abro esta direccion en un navegador puedo ver un archivo XML con todos los metodos que el Servicio Web SOAP tiene capacidad para responder. Entre esos metodos esta el que necesito usar que es:

    obtenerInformacion

    Segun entiendo debo crear una envelope SOAP para poder enviar al servidor y recibir una respuesta de la informacion que nececito y pude observar que utilizan una especie de cliente desde el que envian esto:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sis="http://sistemaexterno.jaxws.com">
       <soapenv:Header/>
       <soapenv:Body>
          <sis:obtenerInformacion>
             <!--Optional:-->
             <codigoProducto>CODPROD</codigoProducto>
             <!--Optional:-->
             <numeroLine></numeroLine>
          </sis:obtenerInformacion>
       </soapenv:Body>
    </soapenv:Envelope>

    Y el Servidor hace una respuesta parecida con la informacion que se solicita. Sin embargo estoy totalmente perdido ya que nunca he usado SOAP, y de echo necesito esto colocar dentro de una aplicacion en VB.net por lo que no se por donde empezar.

    Alguien podria darme una idea de como solucionar este inconveniente, es decir tal vez lo me podria ayudar es como crear esa etiqueta XML y como enviarsela al servidor.

    Gracias a todos

    martes, 20 de enero de 2015 16:15

Respuestas

Todas las respuestas

  • No tienes que construir tú mismo el SOAP Envelope ni generar el xml. Visual Studio tiene la capacidad de crear proxies para servicios web, parecen como clases  normales, pero cuando invocas a sus métodos, por detrás se crea la petición HTTP, crear el SOAP Envelope, el XML y la respuesta xml la deserializa y la ves como objetos.

    Tendro de tu proyecto de Visual Basic, pulsa con el botón derecho en referencias y seleciona "Add Service Reference" en la caja de texto pon esa url y te generará la clase proxy WCF en tu proyecto.

    Si no funciona puedes probar a añadir una "Web Reference" que usa una tecnología más antigua que WCF. Pulsa en el botón advanced y al final del cuadro de diálogo tienes el botón "Add Web Reference".

    Por cierto, yo no puedo ver ese xml poniendo la dirección en el navegador.



    Jesús López


    EntityLite a lightweight, database first, micro orm



    martes, 20 de enero de 2015 16:25
  • Estimado Jesus

    Gracias por tu apoyo, si lo que pasa es que el servicio Web esta unicamente dentro de la LAN, no se puede acceder desde internet, y realmente por el momento tampoco tengo acceso ya que es una servicio de una empresa externa que nos contrato para el desarrollo.

    Lo que me gustaria es saber que codigo debo usar, ya que lo unico que debo hacer es consumir el servicio con ese metodo. Tal vez podrias ayudarme con algun codigo donde pueda ver que clases usar para la solicitud al Servidor?

    Gracias

    martes, 20 de enero de 2015 16:36
  • Ya te lo he dicho, añade un  service reference o una web reference. Esto te generará un proxy. Yo no sé como se va llamar el proxy ni en qué espacio de nombres lo vas a poner. Así que el código que te puedo poner es este:

    Dim proxy As New ElEspacioDeNombreQueHayasElegidoParaLaReferencia.ElNombreDelProxyQueNoSeComoSeLlama()
    
    Dim Resultado As NoSeQueTipoDevuelve = proxy.NoSeComoSeLlamaElMetodo(unParametroSiTiene, OtroParametroSiTiene)

    Si al menos tuviera el wdsl que te devuelve podría hacer algo más, pero así, voy a ciegas.

    La clase que tienes que usar es la del proxy generado.



    Jesús López


    EntityLite a lightweight, database first, micro orm



    martes, 20 de enero de 2015 16:46
  • Me indican que la respuesta que reciben es:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
       <soapenv:Body>
          <ns6:obtenerInformacionResponse xmlns:ns10="http://detalleOrden.jaxws.com" xmlns:ns9="http://jaxws.spyapp.com" xmlns:ns8="http://log.jaxws.spyapp.com" xmlns:ns7="http://orden.jaxws.spyapp.com" xmlns:ns6="http://sistemaexterno.jaxws.spyapp.com" xmlns:ns5="http://inventariolinea.jaxws.spyapp.com" xmlns:ns4="http://ordentrabajo.jaxws.spyapp.com" xmlns:ns3="http://inventarioalmacen.jaxws.spyapp.com" xmlns:ns2="http://tarea.jaxws.spyapp.com">
             
    <return><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
    <resultado>
    <cabecera>
        <codigo>0000</codigo>
        <mensaje>Se obtuvo la información del producto.</mensaje>
    </cabecera>
    <detalle>
        <producto>
            <codproducto>20000505</codproducto>
            <codrapido></codrapido>
            <codbarra>0000505</codbarra>
            <descripcion>producto                                </descripcion>
            <peso>0.0</peso>
            <volumen>0.0</volumen>
            <tipo>N</tipo>
            <cantgaveta>0</cantgaveta>
            <cajaminima></cajaminima>
            <indnosolsec>0</indnosolsec>
            <indinorden>0</indinorden>
            <indoutorden>0</indoutorden>
            <descripbreve></descripbreve>
            <origdespacho></origdespacho>
            <ubicacion></ubicacion>
        </producto>
    </detalle>
    </resultado>]]>
    </return>

          </ns6:obtenerInformacionResponse>
       </soapenv:Body>
    </soapenv:Envelope>

    Esto puede servir de algo?

    martes, 20 de enero de 2015 16:55
  • Puede servir para generar la clase proxy. Guarda eso como archivo servicio.wsdl y ejecuta lo siguiente en la línea de comandos de Visual Studio

    WSDL /l:VB /o:servicio.vb sevicio.wsdl

    A ver si te genera el archivo servicio.vb.

    WSDL es una utilidad de línea de comandos que viene con Visual Studio



    Jesús López


    EntityLite a lightweight, database first, micro orm

    martes, 20 de enero de 2015 17:02
  • Estimado Jesus

    No he podido hacer lo que me solicitas ya que no consigo tener acceso a la LAN, podriamos hacer el mismo ejericio con esta pagina web:

    http://www.webservicex.net/BibleWebservice.asmx?WSDL

    aqui encontre algo parecido a lo que tengo.

    Gracias por tu ayuda, ya agregrue la referenia y llame al servicio "SerivcioWeb"  podria utilizar el metodo GetBibleWordsbyKeyWord

    Gracias

    miércoles, 21 de enero de 2015 16:18