none
Web Reference RRS feed

  • Pregunta

  • Hola

    Tengo un cliente en Windows Forms y quiero consumir un servicio mediante Web Reference el servicio es para consumir un xml en el cual le agrego la factura electrónica firmada.

     https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl

    Tengo la factura electrónica firmada en xml la cual el ente regulador pide convertir a UTF8 y base64, como ya había comentado en un post anterior el archivo xml ya se encuentra en UTF8 por este motivo.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

     Muestro código en el cual obtengo la factura firmada y convertida en base64

    // Create a new XML document.
                    XmlDocument xmlDoc = new XmlDocument();
    
                    X509Certificate2 uidCert = new X509Certificate2(@"D:\\Jimson\jose_antonio_jumbo_castillo.p12", "Jose1965");
    
    
                    // Cargue un archivo XML en el objeto XmlDocument.
                    xmlDoc.Load(@"D:\\Jimson\Factura_001-500-000000005_60.01_ERAS CANDO JIMSON JESUS.xml");
                    xmlDoc.PreserveWhitespace = true;
    
                    // Sign the XML document. 
                    UtilidadFacturaElectronica.SignXml(xmlDoc, uidCert);
    
                    // Save the document. xml firmado
                    xmlDoc.Save(@"D:\\test-signed.xml");
                    //convertir a byte
                    byte[] arrayDeBytes = System.IO.File.ReadAllBytes(@"D:\\test-signed.xml");
                    //convertir a string
                    var codificado = Convert.ToBase64String(arrayDeBytes);
    
                    //var respuesta = _validarFactura.ConsultarRecepcion(codificado);
                    //MessageBox.Show($"{respuesta.Mensaje}", @"Prueba");
    
                    SRRecepcionComprobante.RecepcionComprobantesOfflineClient client =
                        new SRRecepcionComprobante.RecepcionComprobantesOfflineClient();
                    var respuesta = client.validarComprobante(codificado);

    En la documentación de las requerimientos el método por el cual le envio el xml firmado me pide un byte[] pero yo tengo el xml en string base64 de ahí lo había convertido a byte[] pero me dijeron que con esta ultima conversión deja de ser base64.

    ¿Entonces porque me pide un byte[] como parametro?

    En el método que quiero consumir vía Web Reference obviamente me pide un byte[]

    public EnviarFactura.SRRecepcionComprobante.respuestaSolicitud validarComprobante(byte[] xml) {
                EnviarFactura.SRRecepcionComprobante.validarComprobante inValue = new EnviarFactura.SRRecepcionComprobante.validarComprobante();
                inValue.xml = xml;
                EnviarFactura.SRRecepcionComprobante.validarComprobanteResponse retVal = ((EnviarFactura.SRRecepcionComprobante.RecepcionComprobantesOffline)(this)).validarComprobante(inValue);
                return retVal.RespuestaRecepcionComprobante;
            }

    Entonces regresando al comienzo de mi post ¿De que manera debo de convertir el xml firmado en base64 de tal manera que envie un byte[]?

    Gracias anticipadamente por sus respuestas.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    lunes, 7 de enero de 2019 17:47

Respuestas

  • hola

    el paremetro espera un byte[] no necesitas encodear nada a base64 eso lo hara solo el codigo del proxy cuando genere el mensaje soap

    var result = service.validarComprobante(arrayDeBytes);

    tu solo instancia el proxy que se cre al realizar el web reference he invocas el metodo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila lunes, 7 de enero de 2019 18:43
    lunes, 7 de enero de 2019 18:25