public bool ExecuteTransaction(PatientDTO patient, string destination, string message) { bool failedDBCommand = false; bool failedMessengerCommand = false; try { //_dBConnectionInfo = _repository.PrepareAdd(patient); try { _messengerConnectionInfo = _client.SendTransactionalMessage(destination, message); } catch { failedMessengerCommand = true; } } catch { try { _messengerConnectionInfo = _client.SendTransactionalMessage(destination, message); } catch { failedMessengerCommand = true; } failedDBCommand = true; } if (failedDBCommand == true || failedMessengerCommand == true) { _client.RollbackTransactionalMessage(_messengerConnectionInfo.Connection, _messengerConnectionInfo.Session); _repository.RollbackAdd(_dBConnectionInfo.Connection, _dBConnectionInfo.Transaction); return(false); } else { _client.CommitTransactionalMessage(_messengerConnectionInfo.Connection, _messengerConnectionInfo.Session); _repository.CommitAdd(_dBConnectionInfo.Connection, _dBConnectionInfo.Transaction); return(true); } }