private void ColaDeMensajesDeSolicitudes_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            try
            {
                ((MessageQueue)sender).EndReceive(e.AsyncResult);
                Message solicitud = e.Message;

                var formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                solicitud.Formatter = formatter;
                System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
                xmlDocument.LoadXml(solicitud.Body.ToString());

                Solicituddescargamasiva objetoSolicitud = new Solicituddescargamasiva();
                objetoSolicitud.NombreSolicitud = xmlDocument.SelectSingleNode("/SolicitudDescargaMasiva/NombreSolicitud").InnerText;
                objetoSolicitud.FechaInicio     = Convert.ToDateTime(xmlDocument.SelectSingleNode("/SolicitudDescargaMasiva/FechaInicio").InnerText);
                objetoSolicitud.FechaFin        = Convert.ToDateTime(xmlDocument.SelectSingleNode("/SolicitudDescargaMasiva/FechaFin").InnerText);
                objetoSolicitud.IdCliente       = xmlDocument.SelectSingleNode("/SolicitudDescargaMasiva/IdCliente").InnerText;

                ProcesarSolicitud(objetoSolicitud);
            }
            catch
            {
            }

            ar = ColaDeMensajesDeSolicitudes.BeginReceive();
        }
        private void ProcesarSolicitud(Solicituddescargamasiva objetoSolicitud)
        {
            //bool conWindows = Convert.ToBoolean(ConfigurationManager.AppSettings["AutenticarLFConWindows"]);
            //if (!conWindows)
            //{
            //    sesion = Laserfiche.RepositoryAccess.Session.Create(server, database, user, password);
            //}
            //else
            //{
            sesion = Laserfiche.RepositoryAccess.Session.Create(server, database);
            //}
            try
            {
                IArchivosAltContext2 archivosAltContext     = new ArchivosAltContext2Factory().Create();
                List <SqPedimentosSirSaaiReturnModel> lista = archivosAltContext.SqPedimentosSirSaai(objetoSolicitud.FechaInicio.ToString("MM/dd/yyyy"), objetoSolicitud.FechaFin.ToString("MM/dd/yyyy"), Convert.ToInt32(objetoSolicitud.IdCliente), null, 1);



                IBuscadorDocumentos <DocumentoRepositorio> buscador = new Hinojosa.RepositorioDocumentos.Laserfiche.BuscadorDocumentosLaserficheRepositoryAccess(sesion);
                IEnumerable <DocumentoRepositorio>         documentoRepositorios = buscador.BuscarDocumentosExpediente(lista.Select(s => s.Referencia).ToArray(), null);


                //Crear carpeta de la solicitud
                DirectoryInfo directoryInfo = new DirectoryInfo($@"{DirectorioDescargas}{objetoSolicitud.NombreSolicitud}");
                if (!directoryInfo.Exists)
                {
                    directoryInfo.Create();
                }

                //bool nombrePorPedimento = true;


                IExportadorDocumentos <DocumentoRepositorio> exportador = new Hinojosa.RepositorioDocumentos.Laserfiche.ExportadorDocumentosLaserficheRepositoryAccess(sesion);
                exportador.Exportar(documentoRepositorios, $@"{DirectorioDescargas}{objetoSolicitud.NombreSolicitud}", true, (d) =>
                {
                    //if (!nombrePorPedimento)
                    //{
                    //    int dr = d.Ruta.IndexOf(d.Referencia);
                    //    return d.Ruta.Substring(dr, (d.Ruta.Length - dr) - (d.Ruta.Length - d.Ruta.LastIndexOf("\\")));
                    //}
                    //else
                    //{
                    int dr            = d.Ruta.IndexOf(d.Referencia);
                    string subcarpeta = d.Ruta.Substring(dr + d.Ruta.Substring(dr).IndexOf("\\"));
                    subcarpeta        = subcarpeta.Substring(0, subcarpeta.LastIndexOf("\\"));



                    var datosPedimento = lista.First(f => f.Referencia == d.Referencia);
                    return($"{datosPedimento.FechaPago.Substring(8, 2)}{datosPedimento.Aduana}{datosPedimento.Seccion}{datosPedimento.Patente}{datosPedimento.Pedimento}{subcarpeta}");
                    // }
                    //return d.Pedimento;
                });

                objetoSolicitud.Procesado      = true;
                objetoSolicitud.FechaProcesado = DateTime.Now;
                objetoSolicitud.RutaArchivo    = DirectorioDescargas + objetoSolicitud.NombreSolicitud + ".zip";

                context.SaveChanges();

                //Se envía correo al interesado

                //Ver archivo de configuración ya que ahí se encuentra configurado el correo de salida
                SmtpClient clienteSmtp = new SmtpClient("smtp.gmail.com", 587);
                clienteSmtp.Credentials = new System.Net.NetworkCredential("*****@*****.**", "da.hinojosa");
                clienteSmtp.EnableSsl   = true;

                string      remitente = System.Configuration.ConfigurationManager.AppSettings["SMTPRemitente"];
                MailMessage correo    = new MailMessage(remitente, objetoSolicitud.Notificar);
                correo.Body = $"Estimado cliente, le notificamos que la descarga de sus expedientes con folio: {objetoSolicitud.NombreSolicitud} se encuentra disponible para su descarga. Puede ingresar al portal de clientes D.A. Hinojosa para realizar la descarga del mismo a través de este link.\r\n\r\nAtt. Grupo Hinojosa";


                clienteSmtp.Send(correo);
            }
            catch (Exception exc)
            {
                Trace.TraceError(exc.ToString());
                try
                {
                    SmtpClient clienteSmtp = new SmtpClient("smtp.gmail.com", 587);
                    clienteSmtp.Credentials = new System.Net.NetworkCredential("*****@*****.**", "da.hinojosa");
                    clienteSmtp.EnableSsl   = true;

                    string      remitente = System.Configuration.ConfigurationManager.AppSettings["SMTPRemitente"];
                    MailMessage correo    = new MailMessage(remitente, "*****@*****.**");
                    correo.Body = $"Error en descarga LF: {exc.ToString()} ";


                    clienteSmtp.Send(correo);
                }catch (Exception e)
                {
                }
            }
            finally
            {
                if (sesion.IsConnected)
                {
                    sesion.Close();
                }
            }
        }