public List<SpesaDTO> GetSpeseByFilter(SpesaFilter filter, UserInfo userinfo) { var retryCount = 5; var success = false; var windsorRep = new WindsorConfigRepository(); List<SpesaDTO> item = null; while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); var repo = new SpesaRepository(userinfo, windsorRep); item = repo.GetAllByFilter(filter); windsorRep.Commit(); success = true; } catch (Exception ex) { _log.ErrorFormat("Errore nella lettura delle spese - TENTATIVO:{0} - {1} - condominio:{2} - esercizio:{3} - fornitore:{4} - numero documento:{5} - data inizio:{6} - data fine:{7} - protocollo:{8} - importo inizio:{9} - importo fine:{10} - tipo documento:{11} - azienda:{12} - number:{13}", ex, (6 - retryCount), Utility.GetMethodDescription(), filter.CodiceCondominio, filter.CodiceEsercizio, filter.CodiceFornitore, filter.NumeroDocumento, filter.DataDocumentoInizio.GetValueOrDefault(), filter.DataDocumentoFine.GetValueOrDefault(), filter.Protocollo, filter.ImportoInizio.GetValueOrDefault(), filter.ImportoFine.GetValueOrDefault(), filter.TipoDocumento, userinfo.Azienda, getExceptionId(ex)); windsorRep.Rollback(); if (!isRetryException(ex)) throw; // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (6 - retryCount)); retryCount--; _log.InfoFormat("Lettura delle spese - INIZIO TENTATIVO:{0} - {1} - condominio:{2} - esercizio:{3} - fornitore:{4} - numero documento:{5} - data inizio:{6} - data fine:{7} - protocollo:{8} - importo inizio:{9} - importo fine:{10} - tipo documento:{11} - azienda:{12}", (6 - retryCount), Utility.GetMethodDescription(), filter.CodiceCondominio, filter.CodiceEsercizio, filter.CodiceFornitore, filter.NumeroDocumento, filter.DataDocumentoInizio.GetValueOrDefault(), filter.DataDocumentoFine.GetValueOrDefault(), filter.Protocollo, filter.ImportoInizio.GetValueOrDefault(), filter.ImportoFine.GetValueOrDefault(), filter.TipoDocumento, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return item; }