none
Envío de texto XML a API Rest RRS feed

  • Question

  • Saludos, estimados.

    Estoy adentrándome en los terrenos de interoperabilidad y hace rato estoy intentando sin éxito enviar un XML a un servicio web API Rest.

    El procedimiento que realizo es crear el XML con cada uno de las etiquetas y datos que contiene. El cual guardo en una carpeta de mi equipo. Hasta allí todo va bien, el problema es cuando tengo que enviar el contenido de ese XML a un servicio web. No he podido dar con la forma de realizarlo

    La librería que utilizo es RestSharp y el código Visual Basic de Visual Studio Professional 2015 es el siguiente:

      Dim Datos2 = New RestClient("" & DireccionWSDatos & "")

            Dim request3 = New RestRequest(Method.POST)
            request3.AddHeader("Content-Type", "application/xml")
            request3.AddHeader("Authorization", TokendeDatos)
            request3.AddBody(New With {TextoXML})
            Dim response3 As RestResponse = Datos2.Execute(request3)

    En la variable TextoXML es donde debo enviar el XML y el cual no he podido resolver.

    Incluso si me ayudan a desde el momento que genero el XML guardar esa información en una variable para no tener que crear el archivo XML y después recuperarlo para enviar el contenido, se los agradezco.

    Espero que la información suministrada sea suficiente, muchas gracias.

    Sunday, July 5, 2020 6:04 PM

Answers

  • Hola Gabriel, gracias por tu respuesta.

    Seguí investigando y encontré una solución que me pareció más práctica, aunque creo que la mejor es no tener que grabar el XML en disco y volver a recuperarlo para enviar el contenido.

    Este es el código que utilicé para poder pasar el contenido del XML a una variable string y allí poder pasarselo al web service.

            'Read the file back in and parse to ensure well formed XML.
            Dim doc As New XmlDocument()

            'Preserve white space for readability.
            doc.PreserveWhitespace = True

            'Load the file.
            doc.Load("RutayNombredelarchivo.xml")
            XMLdeFactura = doc.InnerXml

    Y la variable XMLdeFactura es la que envío al servicio web mediante este código.

            Dim Datos = New RestClient("" & DireccionWSDatos & "")
            Dim request2 = New RestRequest(Method.POST)
            request2.AddHeader("Content-Type", "application/xml")
            request2.AddHeader("Authorization", TokendeDatos)
            request2.AddParameter("application/xml", XMLdeFactura, ParameterType.RequestBody) 
            Dim response2 As RestResponse = Datos.Execute(request2)

    Wednesday, July 8, 2020 4:38 PM

All replies

  • Hola fernando_junior, voy a investigar tu consulta.

    Saludos cordiales

     

    Gabriel Castro

    Monday, July 6, 2020 5:41 PM
    Moderator
  • Hola fernando_junior,

    Podrías intentar enviarle tu archivo XML al servicio web de la siguiente manera:


    Private Sub SurroundingSub()
        Dim request As HttpWebRequest = TryCast(HttpWebRequest.Create("http://yourdomain.com/whatever"), HttpWebRequest)
        request.Method = "POST"
        request.ContentType = "application/x-www-form-urlencoded"
        Dim e As Encoding = Encoding.GetEncoding("iso-8859-1")
        Dim doc As XmlDocument = New XmlDocument()
        doc.LoadXml("<foo><bar>baz</bar></foo>")
        Dim rawXml As String = doc.OuterXml
        Dim requestText As String = String.Format("myxmldata={0}", HttpUtility.UrlEncode(rawXml, e))
        Dim requestStream As Stream = request.GetRequestStream()
        Dim requestWriter As StreamWriter = New StreamWriter(requestStream, e)
        requestWriter.Write(requestText)
        requestWriter.Close()
    End Sub

    Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

     

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  


    Monday, July 6, 2020 8:43 PM
    Moderator
  • Hola Gabriel, gracias por tu respuesta.

    Seguí investigando y encontré una solución que me pareció más práctica, aunque creo que la mejor es no tener que grabar el XML en disco y volver a recuperarlo para enviar el contenido.

    Este es el código que utilicé para poder pasar el contenido del XML a una variable string y allí poder pasarselo al web service.

            'Read the file back in and parse to ensure well formed XML.
            Dim doc As New XmlDocument()

            'Preserve white space for readability.
            doc.PreserveWhitespace = True

            'Load the file.
            doc.Load("RutayNombredelarchivo.xml")
            XMLdeFactura = doc.InnerXml

    Y la variable XMLdeFactura es la que envío al servicio web mediante este código.

            Dim Datos = New RestClient("" & DireccionWSDatos & "")
            Dim request2 = New RestRequest(Method.POST)
            request2.AddHeader("Content-Type", "application/xml")
            request2.AddHeader("Authorization", TokendeDatos)
            request2.AddParameter("application/xml", XMLdeFactura, ParameterType.RequestBody) 
            Dim response2 As RestResponse = Datos.Execute(request2)

    Wednesday, July 8, 2020 4:38 PM
  • Hola fernando_junior,

    Me alegro de escuchar que solucionaste tu problema, por favor marca la respuesta a tu problema para que otras personas puedan encontrar la solución fácilmente cuando se topen con tu post tratando de solucionar un problema parecido.

    Saludos cordiales

    Gabriel Castro

    Wednesday, July 8, 2020 7:51 PM
    Moderator
  • Listo, muchas gracias.
    Wednesday, July 8, 2020 8:10 PM