anonymous Log in
Search
Recents:
v3.0
xml-l
Re: Consumo de Web Services
28/06/18 10:07

marco.baptista10528

Replies: 1

Hola Salvattore.
Lo que puedes hacer es consumir el web service "a mano". En vez de consumirlo con un external object, hazlo con los tipos de dato HTTPCliente, HTTPRequest y HTTPResponse. El XML lo armas con el tipo de datos XMLWriter y lo lees con XMLReader.
Saludos,
Marco Baptista.
________________________________
De: Salvattore Giulliano Stracuzzi Pástor [salva_best@hotmail.com]
Enviado: miércoles, 27 de junio de 2018 09:33 a.m.
Para: xml-l@gxtech.com.uy
Asunto: [xml-l] RV: Consumo de Web Services
Estimado Foro,
Sus comentarios con un error que tenemos, quiero consumir un Web Services que esta publicado en Internet al cual tengo acceso por un proceso que se esta desarrollando, no se puede usar el WSDL Import porque el método que devuelve el servicio posee una trama del WS configurada como "Abstract" lo cual hace dinámica la respuesta y Genexus no la interpreta, intente modificar el External Object creando un sdt manual con la trama que devuelve pero el proceso da error, las consultas que tengo son:
1. Ustedes han realizado el consumo de un WS similar que posea en la trama la propiedad abstratc mediante el WSDL Import? De ser así me pueden facilitar algún ejemplo o wiki donde acceder.
2. Que alternativa me recomiendan usar en caso que el WSDL Import no funcione?, estuve investigando que mediante el HTTP Client y HTTP Request se puede realizar un consumo de WS, tienen un ejemlo que me puedan facilitar?
Estoy desarrollando en la versión Genexus 15 U8 para ambiente web C#, de antemano muchas gracias.
Saludos Cordiales,
Salvattore Giulliano Stracuzzi Pastor, Ing.
-----------------------------------------
Para Suscribirse/Desuscribirse:
http://www.gxtechnical.com/cgi-bin/hforum.exe?2,3,31
Por consultas owner-xml-l@gxtech.com.uy
Replies

cparisotto

28/06/18 10:44
Recomendo ver https://wiki.genexus.com/commwiki/servlet/wiki?6932,HttpClient+data+type, Segue abaixo exemplo com HTTP CLIENT &HttpClient.Host = &host.Trim() &HttpClient.BaseUrl = &base.Trim() &HttpClient.Secure = &seguro &HttpClient.Execute('POST',&servico) &httpClienteErr = &HttpClient.ErrCode &httpClienterrDes = &HttpClient.ErrDescription &xmlRetorno = &HttpClient.ToString() faz o que precisar pois o XMLRetorno será o texto retornado, pode ser o erro como pode ser um xml que você recebe. abaixo exemplo que uso para consumir NF-e no Brasil onde montamos a chamada soap manual e pegamos o retorno &host = &SDTParametroNFe.host &base = &SDTParametroNFe.base &seguro = &SDTParametroNFe.seguro &servico = &SDTParametroNFe.servico &certificadocaminho = &SDTParametroNFe.certificadocaminho &certificadosenha = &SDTParametroNFe.certificadosenha &addheadername = &SDTParametroNFe.addheadername &addheadervalue = &SDTParametroNFe.addheadervalue &nfeDadosMsgxmlns = &SDTParametroNFe.nfeDadosMsgxmlns &nfeDadosXML = &SDTParametroNFe.nfeDadosXML &HttpClient.Host = &host.Trim() &HttpClient.BaseUrl = &base.Trim() &HttpClient.Secure = &seguro &CertificadoPath = &certificadocaminho.Trim() &senha = &certificadosenha.Trim() csharp try{ csharp [!&HttpClient!].AddCertificate(StringUtil.Trim([!&CertificadoPath!]),StringUtil.Trim([!&senha!])); csharp System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls; &HttpClient.AddHeader(&addheadername, &addheadervalue) &XMLWriter.OpenRequest(&HttpClient) &XmlWriter.IndentChar = '' &XMLWriter.WriteStartDocument('utf-8') &XMLWriter.WriteStartElement('soap12:Envelope') &XMLWriter.WriteAttribute('xmlns:xsi',' http://www.w3.org/2001/XMLSchema-instance') &XMLWriter.WriteAttribute('xmlns:xsd',' http://www.w3.org/2001/XMLSchema') &XMLWriter.WriteAttribute('xmlns:soap12',' http://www.w3.org/2003/05/soap-envelope') &XMLWriter.WriteStartElement('soap12:Body') &XMLWriter.WriteStartElement("nfeDadosMsg") &XMLWriter.WriteAttribute("xmlns", &nfeDadosMsgxmlns) &DadosXml = &nfeDadosXML &XmlWriter.WriteRawText(&DadosXml.Trim()) &XMLWriter.WriteEndElement() &XMLWriter.WriteEndElement() &XMLWriter.WriteEndElement() &XMLWriter.Close() &HttpClient.Execute('POST',&servico) &SDTParametroNFe.httpClienteErr = &HttpClient.ErrCode &SDTParametroNFe.httpClienterrDes = &HttpClient.ErrDescription &xmlRetorno = &HttpClient.ToString() &SDTParametroNFe.xmlRetorno = &xmlRetorno &SDTParametroNFe.executado = 1 msg('Executado', nowait) csharp } csharp catch (Exception error) { csharp [!&errDesc!] = error.Message; msg('Error' + &errDesc, nowait) &SDTParametroNFe.executado = 2 &SDTParametroNFe.xmlRetorno = &errDesc csharp } Abraços Em qui, 28 de jun de 2018 às 10:31, Marco Baptista < marco.baptista@inter.com.ve> escreveu: > Hola Salvattore. > > Lo que puedes hacer es consumir el web service "a mano". En vez de > consumirlo con un external object, hazlo con los tipos de dato HTTPCliente, > HTTPRequest y HTTPResponse. El XML lo armas con el tipo de datos XMLWriter > y lo lees con XMLReader. > > Saludos, > > Marco Baptista. > > ------------------------------ > *


Back to xml-l