public SpesaInfoDTO SalvaSpesa(SpesaDTO spesa, IDictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> listaRipartizioni, bool isMultiIva, UserInfo userinfo) { var retryCount = 10; var success = false; var windsorRep = new WindsorConfigRepository(); var item = new SpesaInfoDTO { Id = 0, Message = "Un altro utente ha confermato un movimento.", StampaEtichettaArchiviazione = false, IdentificativoArchiviazione = null, NumeroProtocollo = 0 }; while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); var repo = new SpesaRepository(userinfo, windsorRep); item = repo.Salva(spesa, listaRipartizioni, isMultiIva); windsorRep.Commit(); success = true; } catch (InvalidDataException ex) { windsorRep.Rollback(); return new SpesaInfoDTO {Message = ex.Message}; } catch (Exception ex) { windsorRep.Rollback(); if (!isRetryException(ex)) { _log.ErrorFormat("Errore nel salvataggio della spesa - TENTATIVO:{0} - {1} - id:{2} - azienda:{3} - number:{4}", ex, (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda, getExceptionId(ex)); throw; } // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (11 - retryCount)); retryCount--; _log.ErrorFormat("Salvataggio della spesa - INIZIO TENTATIVO:{0} - {1} - id:{2} - azienda:{3}", (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return item; }