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ú