Consumir WebService WSDL (.net)


([N1] leonardo daniel velazquez fuentes) #1

Hola a todos… pues espere con ansias la actualizacion de Velneo a la .18 peroooo, resulta que no es compatible con este tipo de servicios… alguien me podria ayudar… por ahi lei sobre CURL, segun debo armar un xml para envisarlo y luego recibir la respuesta, eh intentado probar el servicio desde SoapUI y otros servicios si me funcionan, pero este no, ya lo probe en C# con vs.net 2012 y si funciona… el objetivo es enviar pues los datos de autenticacion del servicio, asi como las ciudades por donde pasara el viaje, nombre de ciudad, estado, codigo postal, incluso tengo latitud y longitud de cada ciudad/cp

El Guille quien es experto en VB/VB.net escribio un articulo acerca de como crear una DLL para consumir un webservice mas o menos igual y luego por programacion instanciarla y llamar a sus metodos… sera posible llamarla desde Velneo ?
http://elguille.info/NET/ASPNET/crearClaseServicioWeb.htm

este es el servicio que debo consumir…! URGENTE…!
http://prime.promiles.com/Webservices/v1/PRIMEStandardV1.asmx?WSDL


([N4] sauron911) #2

Decirte que las Dll que puede absorber Velneo, tienen que estar escritas en C++, cualquier libreria Dll escrita en otro lenguaje no te sirve, y por tanto tampoco estas que estan en VB.net

Salduos


([N3] pacosatu) #3

Hola leonardo daniel velazquez fuentes

¿Dónde has leído que XmlHttpRequest no es compatible con Servicios Web WSDL?
¿Has consultado a soporte por esta cuestión?

Saludos
Paco Satué


([N1] wikan) #4

Yo mando y recibo un xml sin problema ninguno.


([N1] roberto blasco) #5

Hola Leonardo. Si necesitas una dll para consumir WebServices puedes ponerte en contacto conmigo.

Un saludo. Roberto Blasco


([N2] eecbeto) #6

Buenas Roberto desde Panamá, me interesa lo de la DLL para comsumir WebServices, como me pongo en contacto … gracias


([N1] roberto blasco) #7

Hola eccbeto.

Mi correo electrónico es roberto.blasco.serrano@gmail.com

Escríbeme para decirme cuál es exactamente tu caso, por si hay que incorporar proxys o conexiones ssl.

Un saludo. Roberto Blasco.


([N1] leonardo daniel velazquez fuentes) #8

Hola tienes razon, acabo de consultar con Soporte y esta fue su respuesta, pues vere a ver si se puede

Buenos días, Leonardo.

Con la clase XMLHttpRequest puedes interactuar con web services.

En Internet seguramente encontrarás información sobre cómo interactuar con un wervservice usando xmlhttprequest, como por ejemplo:

https://pavanarya.wordpress.com/2012/05/20/calling-a-web-service-from-javascript-using-xmlhttprequest/

Ver el punto titulado Calling Web Service from JavaScript Using XMLHttpReques

[quote quote=43681]Hola leonardo daniel velazquez fuentes

¿Dónde has leído que XmlHttpRequest no es compatible con Servicios Web WSDL?
¿Has consultado a soporte por esta cuestión?

Saludos
Paco Satué

[/quote]

([N3] pacosatu) #9

Hola leonardo daniel velazquez fuentes.

Tema aclarado entonces, con XmlHttpRequest de Velneo se pueden consultar Web Services WSDL/SOAP.

Te pongo un ejemplo sencillo.

Service web -> “http://www.webservicex.net/globalweather.asmx?WSDL
Paquete SOAP -> “<soapenv:Envelope xmlns:soapenv=‘http://schemas.xmlsoap.org/soap/envelope/’ xmlns:web=‘http://www.webserviceX.NET’><soapenv:Header/><soapenv:Body><web:GetWeather><web:CityName>Madrid</web:CityName><web:CountryName>Spain</web:CountryName></web:GetWeather></soapenv:Body></soapenv:Envelope>”

Función: FUN_XHR_TIEMPO


Set ( XHR_URL, "http://www.webservicex.net/globalweather.asmx?WSDL" )
Set ( XHR_DATA, "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:web='http://www.webserviceX.NET'><soapenv:Header/
><soapenv:Body><web:GetWeather><web:CityName>Madrid</
web:CityName><web:CountryName>Spain</web:CountryName></web:GetWeather></
soapenv:Body></soapenv:Envelope>" )
Crear manejador de objeto ( oXML, Proceso PRO_XHR_TIEMPO_JS@0PS__MisFunciones_app )
Set variable local de objeto ( oXML, XHR_URL, XHR_URL )
Set variable local de objeto ( oXML, XHR_DATA, XHR_DATA )
Disparar objeto ( oXML, 1º plano: Local (síncrono), LOK )
Libre
Get variable local de objeto ( oXML, XHR_SALIDA_XML, XHR_SALIDA_XML )
Get variable local de objeto ( oXML, _NERROR, _NERROR )
Get variable local de objeto ( oXML, _NSTATUS, _NSTATUS )
Libre
Rem ( Mensaje de Error )
If ( _NERROR > 0 )
Mensaje ( "Se ha producido un error " + numberToString(_NERROR, "L", 0) + " del objeto
XmlHttpRequest. Código HTTP devuelto en el Response: " + numberToString(_NSTATUS, "L", 0),
Información, , )
Set dato de retorno ( "" )
Else
Set ( XHR_SALIDA_XML, replaceString(replaceString(XHR_SALIDA_XML, "<", "<"), ">", ">") )
Mensaje ( "Resultado XML:\n\n" + XHR_SALIDA_XML, Información, , )
Set dato de retorno ( XHR_SALIDA_XML )
Libre

Proceso JavaScript PRO_XHR_TIEMPO_JS


importClass("XMLHttpRequest");

// URL de acceso al web service
var cURL = theRoot.varToString("XHR_URL")
// ASÍNCRONO. Asincrono no
var lAsincrono = false
// LOGIN del método Open()
var cUsuario = "", cClave = ""
// INSTANCIAR XHR. Instanciamos el objeto XmlHttpRequest
var xhr = new XMLHttpRequest()
// TIMEOUT
xhr.timeout = 15000
// STRING. Tipo del Response texto
xhr.responseType = ""
// OPEN. Abrimos la conexión
xhr.open("POST", cURL, lAsincrono, cUsuario, cClave);
// CABECERAS. Indicamos al servidor que los datos del POST están en formato XML
xhr.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
// SEND. Enviamos el paquete SOAP xml
var cDatos = theRoot.varToString("XHR_DATA")
xhr.send(cDatos)
// XML. Recogemos el resultado
theRoot.setVar("XHR_SALIDA_XML", xhr.response)

theRoot.setVar("_NERROR", xhr.errorCode)	// Código de error Ver lista en el API de Velneo
theRoot.setVar("_NSTATUS", xhr.status)	    // Código HTTP del resultado 200=OK, otros 20X, 40X, 50X

Obtienes un string XML que tendrás que parsear con alguna herramienta externa a Velneo o usar funciones de cadena nativas.
Por supuesto, si el XML es muy complejo mejor una DLL de pago para obtener resultados fiables.

En este ejemplo he usado las funciones que venían en la Open App vUtiles (ver adjunto).

Saludos
Paco Satué



([N4] Jorge) #10

XMLHttpRequest soporta consumo de servicios web SOAP sin lugar a dudas. La única cuestión que tal vez está en el aire es… ¿qué tal será implementar un consumidor SOAP con soporte WS-* (por ejemplo WS-Security)?.


([N1] leonardo daniel velazquez fuentes) #11

Hola a todos de nuevo… resulta que eh estado probando los diferentes webservices que me nombraron x aqui, asi como algunas funciones sencillas del que yo utilizare, y si funciona perfecto estoy usando Chrome con la Chrome APP RestInSoap… solo que el servicio que debo utilizar debo enviar 2 ciudades o mas… la estructura esta conformada asi… me canso de buscar en la descripcion del webservice y no entiendo, tambien eh revisado el API .net y es un arreglo y no se como hacer eso en mi archivo para enviar y recibir… intete duplicar la seccion donde se pone la ciudad y me dice el webservice, datos invalidos de viaje y si dejo solo una ciudad el error es debe haber al menos 2 destinos…

Si observan la seccion TRIPLEGS seria el arreglo y TripLeg son los datos del destino, lo que hice fue duplicarlo y pues nop, no se como hacer para enviar 2 destinos o mas

      <pro:BasicTrip>
        <pro:TripID>100</pro:TripID>
        <pro:TripLegs>
          <pro:TripLeg>
            <pro:ProMilesLocationID>165120</pro:ProMilesLocationID>
            <pro:Address>?</pro:Address>
            <pro:City>Eagle Pass</pro:City>
            <pro:State>TX</pro:State>
            <pro:PostalCode>78853</pro:PostalCode>
            <pro:Latitude>0</pro:Latitude>
            <pro:Longitude>0</pro:Longitude>
            <pro:LocationText>Eagle Pass, TX, 78853</pro:LocationText>
            <pro:Label>?</pro:Label>
            <pro:Type>PROMILES</pro:Type>
            <pro:LocationProperties>
              <pro:LocationProperty>
                <pro:Name>?</pro:Name>
                <pro:Value>?</pro:Value>
              </pro:LocationProperty>
            </pro:LocationProperties>
            <pro:PerMileRate>0</pro:PerMileRate>
            <pro:FlatRate>0</pro:FlatRate>
            <pro:Comments>?</pro:Comments>
          </pro:TripLeg>
          <pro:TripLeg>
            <pro:ProMilesLocationID>119953</pro:ProMilesLocationID>
            <pro:Address>?</pro:Address>
            <pro:City>Piqua</pro:City>
            <pro:State>OH</pro:State>
            <pro:PostalCode>45356</pro:PostalCode>
            <pro:Latitude>0</pro:Latitude>
            <pro:Longitude>0</pro:Longitude>
            <pro:LocationText>Piqua, OH, 45356</pro:LocationText>
            <pro:Label>?</pro:Label>
            <pro:Type>PROMILES</pro:Type>
            <pro:LocationProperties>
              <pro:LocationProperty>
                <pro:Name>?</pro:Name>
                <pro:Value>?</pro:Value>
              </pro:LocationProperty>
            </pro:LocationProperties>
            <pro:PerMileRate>0</pro:PerMileRate>
            <pro:FlatRate>0</pro:FlatRate>
            <pro:Comments>?</pro:Comments>
          </pro:TripLeg>
        </pro:TripLegs>
        <pro:ResponseStatus>SUCCESS</pro:ResponseStatus>
        <pro:TripStartDate>2015-10-29T00:00:00</pro:TripStartDate>
        <pro:TripEndDate>2015-10-29T00:00:00</pro:TripEndDate>

Esta es la descripcion del webservice…
http://prime.promiles.com/Webservices/v1/PRIMEStandardV1.asmx?WSDL


([N4] arturomiranda) #12

Nosotros el tema de webservice lo resolvimos , interactuando con php desde Velneo , con php aprovechamos su potencia no sólo para consumir webservices , si no para manejo de OpenSSL , manejo de archivos XML, XSLT, XSD, y varias cosas más de manera sencilla

Saludos


([N1] leonardo daniel velazquez fuentes) #13

Hola, pues que bien… peroooo, el asunto es que este webservice es de una empresa que da el servicio de trazado de rutas de trailers en USA, no puedes hacerlo desde otro lado como google, ya que son rutas diferentes para los Trailers… asi que pues tendre que seguir investigando como generar el TripLegs en mi xml de request… o de plano hacerlo en otro programa, no se guardar localmente una SQLite con los datos de las ciudades y luego lanzar otro programa .net el cual procese el servicio y guarde los datos de vuelta y luego los leo desde SQLite y los meto a Velneo… en fin… a ver que se me ocurre si no encuentro la forma de formar un array de viajes en el xml de request

[quote quote=43731]Nosotros el tema de webservice lo resolvimos , interactuando con php desde Velneo , con php aprovechamos su potencia no sólo para consumir webservices , si no para manejo de OpenSSL , manejo de archivos XML, XSLT, XSD, y varias cosas más de manera sencilla

Saludos

[/quote]

([N4] Jorge) #14

Leonardo… yo con Web Services me pegué bastante y siempre uso el mismo método para resolver los problemas de mal comportamiento/funcionamiento:

1.- Asegúrate de que lo que pretendes lo resuelve otra aplicación correctamente.
2.- Asegúrate de que tu implementación hace lo mismo (según lo que diga la API de servicio).
3.- Ten cuidado con las codificaciones del mensaje SOAP y del encabezado.
4.- Coge una aplicación funcional y captura el tráfico de la petición/respuesta.
5.- Haz lo mismo con tu aplicación.
6.- Comprueba las diferencias bit a bit.

Todo ello te ayudará a ver los motivos del mal funcionamiento.


([N4] jortiz) #15

¿Existe alguna forma de tratar el string XML que obtienes de respuesta del WebService? Es decir, acceder al valor de ir recorriendo los nodos del XML y quedandonos con el valor de los nodos que necesitemos tratar.


([N1] leonardo daniel velazquez fuentes) #16

Hola pues es lo que yo necesitare hacer, aun no llego a esa parte, creo que es mas facil procesar la info teniendola en JSON, por ahi en la red hay varios scripts de como pasar un xml a json… tambien lo voy a checar, por lo pronto vi que Jscript en Velneo si puede leer XML
http://velneo.es/parseador-documentos-xml/

http://foro6x.velneo.es/viewtopic.php?t=20382
aunque es de la version 6, creo que hay que probar la integrada de la version 7 mejor

https://pavanarya.wordpress.com/2012/05/20/calling-a-web-service-from-javascript-using-xmlhttprequest/

[quote quote=43919]¿Existe alguna forma de tratar el string XML que obtienes de respuesta del WebService? Es decir, acceder al valor de ir recorriendo los nodos del XML y quedandonos con el valor de los nodos que necesitemos tratar.

[/quote]

([N4] eduarchap) #17

Buenas tardes.

Yo estuve por un buen tiempo esperando y sufriendo con este tema, pero a la final me decidi a implementarlo con PHP, ya que me permite aprovechar las potencialidades que da el lenguaje asi como su manejo y control de las respuestas. Claro esta, diseñe las clases PHP especificas para mis necesidades. Sin embargo es 100% funcional y no se ve afectado el tiempo de respuesta. Lo unico que hago es desde procesos en Velneo ejecutar esos PHP y listo.

Para el tema de la respuesta, en algunos casos es mas sencillo trabajarlos como objetos JSON en otros es mas sencillo incluso llevarlo a vectores y matrices. De todas maneras yo desarrolle un simple codigo que transforma eso. El que mas utilizo es Array2XML. Pero siguiendo la misma logica se puede convertir casi cualquier objeto.

Saludos.


([N1] leonardo daniel velazquez fuentes) #18

Hola precisamente a eso es a lo que sigo ver como lo leo para bajarlo a unas tablas… o convertirlo a json , lo que se mas facil

[quote quote=43919]¿Existe alguna forma de tratar el string XML que obtienes de respuesta del WebService? Es decir, acceder al valor de ir recorriendo los nodos del XML y quedandonos con el valor de los nodos que necesitemos tratar.

[/quote]

([N4] jortiz) #19

eduarchap, tú crees que sería mejor implementar los clientes de consumidores de Webservice en PHP, que con la librería javascript xmlhttprequest? Es decir, la idea es utilizar a PHP de intermediario.
No tengo claro cual sería el proceso.
Creo el cliente php con libreía nusoap (es la que suelo utilizar) y luego de alguna forma tengo que enviar ese resultado a Velneo. Genero en el php ¿el resultado en json? ¿Cómo definiría el proceso en Velneo que llama a ese cliente php?
¿Podrías poner, por favor, algún ejemplo?

Muchísimas gracias.