private static void HiloSecundario() { var polizaPL = new PolizaPL(); PolizaAbstract polizaSAP = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaVenta); int organizacionID; int polizaID = 0; int tipoPolizaID = 0; var intentos = new List <int>(); var archivosEnviados = new HashSet <string>(); var thread = new Thread(delegate() { Queue <IList <PolizaInfo> > polizas = null; try { polizas = polizaPL.ObtenerPolizasPendientes(); } catch (Exception ex) { logger.WriteEntry( string.Format( "ERROR AL QUERER RECUPERAR POLIZAS PENDIENTES {0}", ex.StackTrace), EventLogEntryType.Error); } if (polizas != null) { while (polizas.Count > 0) { IList <PolizaInfo> poliza = polizas.Dequeue(); organizacionID = poliza.Select(org => org.OrganizacionID).FirstOrDefault(); try { lock (archivosEnviados) { polizaID = poliza.Select(id => id.PolizaID).FirstOrDefault(); tipoPolizaID = poliza.Select(id => id.TipoPolizaID).FirstOrDefault(); switch ((TipoPoliza)tipoPolizaID) { case TipoPoliza.EntradaGanado: case TipoPoliza.EntradaCompra: case TipoPoliza.PolizaSacrificio: IList <string> referencia3 = poliza.Select(ref3 => ref3.Referencia3).Distinct().ToList(); for (int indexRef3 = 0; indexRef3 < referencia3.Count; indexRef3++) { IList <PolizaInfo> polizasEntrada = poliza.Where(ref3 => ref3.Referencia3.Equals(referencia3[indexRef3])). ToList(); if (polizasEntrada != null && polizasEntrada.Any()) { if (!archivosEnviados.Contains( polizasEntrada.Select(nombre => nombre.ArchivoFolio).First())) { polizaSAP.GuardarArchivoXML(polizasEntrada, organizacionID); } archivosEnviados.Add( polizasEntrada.Select(nombre => nombre.ArchivoFolio).First()); } } break; default: if ( !archivosEnviados.Contains( poliza.Select(nombre => nombre.ArchivoFolio).First())) { polizaSAP.GuardarArchivoXML(poliza, organizacionID); } archivosEnviados.Add( poliza.Select(nombre => nombre.ArchivoFolio).First()); break; } logger.WriteEntry( string.Format( "ESCRIBIO EL ARCHIVO PARA LA CLAVE DE POLIZA {0}", polizaID), EventLogEntryType.Information); try { polizaPL.ActualizaArchivoEnviadoSAP(polizaID); } catch (Exception) { logger.WriteEntry( string.Format( "OCURRIO UN ERROR AL QUERER ACTUALIZAR BANDERA DE ENVIADO A SERVIDOR {0}", polizaID), EventLogEntryType.Error); } } } catch (Exception) { lock (archivosEnviados) { if (!archivosEnviados.Contains(poliza.Select(nombre => nombre.ArchivoFolio).First())) { lock (intentos) { if (intentos.Count(clave => clave == polizaID) < 3) { polizas.Enqueue(poliza); intentos.Add(polizaID); } else { intentos.RemoveAll(clave => clave == polizaID); } } } if (intentos.Count(clave => clave == polizaID) > 0) { logger.WriteEntry( string.Format( "ERROR AL QUERER ESCRIBIR EL ARCHIVO PARA LA CLAVE DE POLIZA {0}, EN EL INTENTO {1}", polizaID, intentos.Count(clave => clave == polizaID)), EventLogEntryType.Error); } } } } } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); }