viernes, 10 de julio de 2020

C# - Servicio Web (.asmx ) Asyncrono


--
Framework 4.6.1
--
.asmx
--
[WebMethod]
        public string IntegracionContabilidad(DateTime fecha)
        {
            var dateTimeNow = DateTime.Now.ToString().Replace(" ", "").Replace("-", "").Replace("/", "").Replace(":", "");
            var filePath = "C://IntegracionesContables//IntegracionContabilidad_" + dateTimeNow + ".xml";
            var filePathReturn = "IntegracionContabilidad_" + dateTimeNow + ".xml";

            new IntegracionesContabilidasBc().GetIntegracionContabilidad(fecha, filePath, filePathReturn);
           //este retorno es inmediato (async)
            return filePathReturn;
        }
--
.BC
--
 //Async indica que se hará una llamada asincrona
        public async void GetIntegracionContabilidad(DateTime fecha, string filePath, string filePathReturn)
        {
            //inicializo, e indico que tarea(s) se va(n) a realizar
            var task = GetIc(fecha, filePath, filePathReturn);
            //Inicio la Tarea
            task.Start();
            //Activo el await para retornar control a método que nos invocó (IntegracionContabilidad), con un Delay de un milisegundo para que vuelva de inmediato       
            await Task.Delay(1);
        }

//declarado como Task.
  public Task<string> GetIc(DateTime fecha, string filePath, string filePathReturn)
        {
            return new Task<string>(() =>
            {
                var dt = new IntegracionesContabilidadDac().GetIntegracionContabilidad(fecha);
                var structListClass = MapeoContabilidadDataTableToListClass(dt);

                var xmlString = ConvierteListaDeClaseContablidadToXmlString(structListClass);
                var xmlDoc = ConvierteStringToXml(xmlString);
                xmlDoc.Save(filePath);
                return "OK";
            });
        }

No hay comentarios:

Publicar un comentario