public void GetIntegrationParameters() { using (DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter integrationTableAdapter = new DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter()) { using (DataSet1.INTEGRATOR_INTEGRATIONDataTable integrationDataTable = new DataSet1.INTEGRATOR_INTEGRATIONDataTable()) { try { integrationTableAdapter.FillBySeq(integrationDataTable, seq); int intTemp; DateTime dateTimeTemp; if (DateTime.TryParseExact(integrationDataTable[0]["BASE_TIME"].ToString(), "dd/MM/yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out dateTimeTemp)) { baseTime = dateTimeTemp; } else { baseTime = null; } paused = (integrationDataTable[0]["PAUSED"].ToString() == "Y") ? true : false; if (paused) { //Quando pausado, a thread verificará a cada 15s se foi resumido interval = 15; } else { if (int.TryParse(integrationDataTable[0]["INTERVAL"].ToString(), out intTemp)) { interval = intTemp; } } if (int.TryParse(integrationDataTable[0]["DELAY"].ToString(), out intTemp)) { delay = intTemp; } if (int.TryParse(integrationDataTable[0]["MAX_TRIES"].ToString(), out intTemp)) { maxTries = intTemp; } timer.Interval = interval * 1000; } catch (Exception ex) { Logger.AddToFile(ex.ToString()); } } } }
public void Start() { Logger.AddToFile("Serviço iniciado."); if (integrationList.Count == 0) { using (DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter integrationTableAdapter = new DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter()) { using (DataSet1.INTEGRATOR_INTEGRATIONDataTable integrationDataTable = new DataSet1.INTEGRATOR_INTEGRATIONDataTable()) { try { integrationTableAdapter.Fill(integrationDataTable); foreach (var row in integrationDataTable) { Integration integration; int intTemp; if (int.TryParse(row["SEQ"].ToString(), out intTemp)) { if (row["INSTANCE_NAME"].ToString() == Properties.Settings.Default.InstanceName) { integration = new Integration(intTemp); integration.name = row["INTEGRATION_NAME"].ToString(); integration.type = row["TYPE"].ToString(); integrationList.Add(integration); } } } } catch (Exception ex) { Logger.AddToFile(ex.ToString()); } } } if (integrationList.Count == 0) { Logger.AddToFile("Nenhuma integração encontrada para essa instância. Verfique a tag InstanceName do arquivo .config e a tabela INTEGRATOR_INTEGRATION."); } else { foreach (Integration integration in integrationList) { ThreadPool.QueueUserWorkItem(new WaitCallback(integration.Start)); } } } ThreadPool.QueueUserWorkItem(new WaitCallback(Sender.Start)); }
public static void Start(object obj) { while (true) { using (DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter integrationTableAdapter = new DataSet1TableAdapters.INTEGRATOR_INTEGRATIONTableAdapter()) { using (DataSet1TableAdapters.INTEGRATOR_LOGTableAdapter logTableAdapter = new DataSet1TableAdapters.INTEGRATOR_LOGTableAdapter()) { using (DataSet1.INTEGRATOR_LOGDataTable logDataTable = new DataSet1.INTEGRATOR_LOGDataTable()) { try { int seq; int intTemp; int seqIntegration; int tries = 0; int maxTries = 0; string log; string resultString = string.Empty; logTableAdapter.UpdatePending(); logTableAdapter.FillByPending(logDataTable); foreach (DataRow row in logDataTable.Rows) { if (int.TryParse(row["SEQ"].ToString(), out intTemp)) { seq = intTemp; if (int.TryParse(row["SEQ_INTEGRATION"].ToString(), out intTemp)) { seqIntegration = intTemp; Integration integration = new Integration(seqIntegration); integration.GetIntegrationParameters(); if (integration.paused) { continue; } maxTries = integration.maxTries; if (int.TryParse(row["TRIES"].ToString(), out intTemp)) { tries = intTemp; } log = row["LOG"].ToString(); if (tries >= maxTries) { log = IncrementLog(log, "O número máximo de tentativas foi excedido (" + tries + "/" + maxTries + ")."); Logger.UpdateLog(seq, string.Empty, log, "X", true); } else { using (DataSet1TableAdapters.INTEGRATOR_WEBSERVICETableAdapter webserviceTableAdapter = new DataSet1TableAdapters.INTEGRATOR_WEBSERVICETableAdapter()) { using (DataSet1.INTEGRATOR_WEBSERVICEDataTable webserviceDataTable = new DataSet1.INTEGRATOR_WEBSERVICEDataTable()) { try { webserviceTableAdapter.FillByIntegration(webserviceDataTable, seqIntegration); foreach (DataRow webserviceRow in webserviceDataTable.Rows) { if (int.TryParse(webserviceRow["SEQ"].ToString(), out intTemp)) { WebService webservice = new WebService(); webservice.seq = intTemp; webservice.url = webserviceRow["URL"].ToString(); webservice.webservNamespace = webserviceRow["NAMESPACE"].ToString(); webservice.method = webserviceRow["METHOD"].ToString(); webservice.logRow = row; webservice.GetParameters(); bool parseError = false; string error = string.Empty; webservice.Invoke(); resultString = webservice.resultString; using (DataSet1TableAdapters.INTEGRATOR_PROCEDURETableAdapter procedureTableAdapter = new DataSet1TableAdapters.INTEGRATOR_PROCEDURETableAdapter()) { using (DataSet1.INTEGRATOR_PROCEDUREDataTable procedureDataTable = new DataSet1.INTEGRATOR_PROCEDUREDataTable()) { procedureTableAdapter.FillByWebservice(procedureDataTable, webservice.seq); foreach (DataRow procedureRow in procedureDataTable.Rows) { if (int.TryParse(procedureRow["SEQ"].ToString(), out intTemp)) { Procedure procedure = new Procedure(); procedure.seq = intTemp; procedure.owner = procedureRow["OWNER"].ToString(); procedure.name = procedureRow["NAME"].ToString(); try { procedure.GetParameters(webservice.resultXML); } catch (Exception) { parseError = true; try { error = webservice.resultXML.Descendants().Where(x => x.Name.ToString().ToLower().Contains("erro")).FirstOrDefault().Value; } catch (Exception) { //Bypass error } } if (!parseError) { procedure.Execute(); } } } } } if (parseError) { log = IncrementLog(log, "Erro ao interpretar retorno: " + error); Logger.UpdateLog(seq, resultString, log, "D", false); } else { log = IncrementLog(log, "SUCESSO!"); Logger.UpdateLog(seq, resultString, log, "S", false); } } } } catch (Exception ex) { log = IncrementLog(log, ex.ToString()); Logger.UpdateLog(seq, resultString, log, "F", false); } } } } } } } } catch (Exception ex) { Logger.AddToFile(ex.ToString()); } Thread.Sleep(15 * 1000); //Aguarda antes de tentar novamente. } } } } }