none
Como enviar una archivo XML a un servidor y Recibir la Respuesta XML en C#

    Question

  • Buenos Dias.

    El sitio de ARBA tiene un Servicio que uno manda un archivo xml para consultar alicuota de impuesto y envia como respuesta otro archivo xml con la alicuota. Me gustaria saber como se hace en C#

    yo tengo un archivo Html a una con los siguientes datos

    consulta.html

    <FORM enctype="multipart/form-data" method="POST" action="http://dfe.ec.gba.gov.ar/DomicilioElectronico/SeguridadCliente/dfeServicioConsulta.do">
     <TABLE>
           <TR><TD>Usuario: </TD><TD align="left"><INPUT TYPE="text" NAME="user" value="30999999993"></TD></TR>
           <TR><TD>Password: </TD><TD align="left"><INPUT TYPE="text" NAME="password" value="xxxxxx"></TD></TR>
           <TR><TD colspan="2"><INPUT TYPE="file" NAME="file"</TD></TR>
           <TR><TD colspan="2"><INPUT TYPE="submit" VALUE="Enviar"</TD></TR>
            </TABLE>
    </FORM>

    en el cual pide el usuario, que es el cuit, un password y un archivo xml que se envia al servidor

    Ejemplo de xml

    DFEServicioConsulta_4536e90605cd44f652680caee0fdbdb3.xml

    <?xml version = "1.0" encoding = "ISO-8859-1"?>
    <CONSULTA-ALICUOTA>
        <fechaDesde>20120301</fechaDesde>
        <fechaHasta>20120331</fechaHasta>
        <cantidadContribuyentes>1</cantidadContribuyentes>
          <contribuyentes class="list">
            <contribuyente>
              <cuitContribuyente>30123456780</cuitContribuyente>
            </contribuyente>
          </contribuyentes>
    </CONSULTA-ALICUOTA>

    y si esta todo bien responde con otro archivo xml

    DFERespuesta_eda54f86f8d3262cef8df064fdde0358.xml

    <?xml version='1.0' encoding='ISO-8859-1'?>
    <COMPROBANTE>
      <numeroComprobante>26779999</numeroComprobante>
      <fechaDesde>20120301</fechaDesde>
      <fechaHasta>20120331</fechaHasta>
      <cantidadContribuyentes>1</cantidadContribuyentes>
      <contribuyentes class="list">
        <contribuyente>
          <cuitContribuyente>30123456780</cuitContribuyente>
          <alicuotaPercepcion>1,50</alicuotaPercepcion>
          <alicuotaRetencion>0,90</alicuotaRetencion>
          <grupoPercepcion>6</grupoPercepcion>
          <grupoRetencion>6</grupoRetencion>
        </contribuyente>
      </contribuyentes>
    </COMPROBANTE>

    o si algo esta mal develve el siguiente xml

    DFERespuesta.xml

    <?xml version='1.0' encoding='ISO-8859-1'?>
    <ERROR>
      <tipoError>DATO</tipoError>
      <codigoError>14</codigoError>
      <mensajeError>&lt;![CDATA[Error de integridad en los datos enviados]]/&gt;</mensajeError>
    </ERROR>

    Mi pregunta es la siquiente. Se puede hacer esto en C#.

    Desde ya muchas gracias

    Friday, March 23, 2012 1:03 PM

Answers

All replies

  • Me gustaria saber como se hace en C#

    pero quieres saber como crear tu propio servicio, o como consumir el de ARBA ?

    en el cual pide el usuario, que es el cuit, un password y un archivo xml que se envia al servidor

    pero cual es la duda, es armar el xml o el invocar al servicio

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, March 23, 2012 1:12 PM
  • Gracias Leandro por tu respuesta.

    Lo que quiero saber es como hacerlo en una aplicacion c# . Yo dentro de una aplicacion quisiera llamar al servicio de arba enviando los datos que me solicita , recibir la respuesta y poder usarlo en mi aplicacion. En Estos momentos lo puedo hacer manualmente. pero quisiera hacerlo desde mi aplicacion. Hoy en dia bajo el padron completo todos los meses y lo importo en mi base de datos pero esto se hace medio pesado ya que no uso el padron completo.

    Lo que escribi en mi consulta lo puedo hacer manualmente cargando en mi navegador la pagina consulta.html, que tiene por default el cuit y el password y solo el adjunto el xml con los datos de la consulta y al enviarlo me devuelve el xml con la respuesta. Esto funciona, pero quiero que me orientes como hacerlo desde c#,

    Espero haber podido expresarme correctamente y se entienda mi consulta.

    Nuevamente muchas gracias por tu ayuda.

    Friday, March 23, 2012 4:03 PM
  • pero es un servicio o sea un asmx lo que debes invocar ? porque veo que comentas que usas un html, eso no es un servicio es solo una pagina, si es asi deberias usar el control WebBrowser para poder interactuar con el DOM del xml que se genera

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, March 23, 2012 4:36 PM
  • Gracias leandro por tu tiempo, pero no se si es lo que necesito.

    Lo que quiero hacer en mi aplicacion es

    el usuario ingresa un numero de cuit

    yo dentro de mi aplicacion en lugar de consultar la base de datos local quiero generar el archivo xml con los datos del cuit a consultar segun el formato indicado en mi primer mensaje, conectarme al servido de arba, enviando mi cuit y mi password adjuntando el archivo xml de solicitud , esperar la respuesta de arba, que devuelve un archivo xml con los datos solicitados, preocesarlo en mi aplicacion y mostrarle al usuario la alicuota que debe aplicar.

    Todo esto lo uedo hacer manualmente con el html que esta en mi primer mensaje, yo lo abro en mi navegador, indico el archivo xml, le doy enviar y recibo el xml, segun lo comentado anteriormente. Eso funciona perfecto, pero quiero hacerlo desde mi aplicacion y que sea transparente para el usuario.

    Estuve viendo la httpclient pero no logro mi cometido.

    Gracias nuevamente y el tiempo dispensado

    Friday, March 23, 2012 4:53 PM
  • Te adjunto un link que quizas pueda explicar un poco mejor lo que necesito. Aclaro tambien que estoy usando aplicaciones windows form

    http://www.arba.gov.ar/bajadas/IngresosBrutos/RegimenSujeto/20091222-DFE-especificaciones.pdf

    Gracias nuevamente

    Friday, March 23, 2012 5:00 PM
  • a invocar ese servicio deberias suar algo como esto

    How to use HttpWebRequest to send POST request to another web server?

    como veras usa

    myRequest.Method = "POST";

    para indica que los datos se envian por post

    en los datos debes enviar lo que alli comentas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, March 23, 2012 7:00 PM
  • Gracias Leandro por tu respuesta. Me voy a interiorisar y te comento como me va

    Gracias por tu ayuda

    Friday, March 23, 2012 11:14 PM
  • Hola Leandro, me podrias decir como es que generas el nombre del archivo xml que envias? Por lo que lei es nombre del archivo se forma con . DFEServicioConsulta_ + el codigo md5 del contenido del archivo? .

    Muchas gracias......

    Thursday, March 29, 2012 11:58 AM
  • Hola Pablo, lo podes hacer con el siguiente codigo, el valor md5 del archivo te queda en el string sb, que es lo que tenes que agregarle al nombre del archivo DFEServicioConsulta_

                    FileStream fs = new FileStream(archivo, FileMode.Open);
                    MD5 hash = new MD5CryptoServiceProvider();
                    fs.Seek(0, SeekOrigin.Begin);
                    StringBuilder sb = new StringBuilder();
                    foreach (Byte b in hash.ComputeHash(fs))
                            sb.Append(b.ToString("x2"));
    Espero que te sea de ayuda.

    Por mi parte todavia no pude hacer funcionar el envio del archivo al servido. Sigo intentando...

    Friday, March 30, 2012 3:49 PM
  • Gracias Fernando por la respuesta....

    A ver si entendi como es el concepto:

    yo tengo el archivo xml con la consulta que quiero enviar a Arba.

    Tengo que renombrar ese archivo a:

      DFEServicioConsulta_ + el codigo md5 que se genera a partir del contenido del archivo xml y luego enviarlo ?

    Por otro lado, en el pdf donde esta la explicacion figura un https , pero me parece que es http , verdad? con https no tengo ningun tipo de respuesta.

    Muchas gracias

    Tuesday, April 03, 2012 1:41 PM
  • En ejemplo que esta al inicio de esta consulta, esta el ejemplo de una achivo html, que lo esta mandando a un http:

    en ese html te pide el usuario , el password y el archivo xml , se lo envio a la direccion que figura ahi, y te devuelve un xml con la respuesta. Si esta todo bien te devuelve la repuesta con los datos solicitados y si esta mal un xml con el error detectado

    Manualmente lo puedo hace, pero todavia no lo puedo hacer desde una aplicacion c#. Acepto sugerencias.

    Tuesday, April 03, 2012 4:34 PM
  • Estimados, pudieron conseguir resultados? 

    Me llegó un requerimiento para este servicio. La documentación que publica Arba es escasa y toda ayuda será más que bienvenida.

    Muchas gracias!!

    Wednesday, June 13, 2012 1:38 PM
  • Estmados, estoy con el mismo problema desde hace dias, encontraron alguna solucion?

    Yo llego a generar el archivo y enviarlo pero siempre obtengo como resultado "error de integridad".

    Monday, May 20, 2013 12:11 PM
  • Revisad WebClient Class

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    Monday, May 20, 2013 12:24 PM
  • Fernando en este momento esta funcionando el webservice de arba por este sistema de consulta por pagina HTML ?

    saludos

    Carlos

    Friday, November 29, 2013 1:33 PM
  • Hola. Yo logré enviar los datos pero como respuesta recibo "error inesperado".

    Hice pruebas y no entiendo dónde está el problema. En una de esas pruebas cambié el código HASH por uno inválido y obtuve "error de integridad". Seguramente el HASH está mal generado o no renombraste o guardaste el .xml con el nombre correcto.

    Alguien más copn error inesperado que me pueda dar una mano?

    Gracias

    Monday, March 17, 2014 1:34 PM
  • Hola por favor me puedes decir como enviaste los datos desde C#...??? el archivo XML..???

    Gracias.

    Saludos,

    Tuesday, July 22, 2014 3:07 PM