public bool DeduplicateMessage(string clientId, DateTime timeReceived) { using (var conn = SessionFactory.GetConnection()) using (var session = SessionFactory.OpenSessionEx(conn)) using (var tx = session.BeginAmbientTransactionAware(IsolationLevel.ReadCommitted)) { var gatewayMessage = session.Get<DeduplicationMessage>(clientId); if (gatewayMessage != null) { tx.Commit(); return false; } gatewayMessage = new DeduplicationMessage { Id = clientId, TimeReceived = timeReceived }; try { session.Save(gatewayMessage); tx.Commit(); } catch (GenericADOException) { tx.Rollback(); return false; } } return true; }
public Task <bool> DeduplicateMessage(string clientId, DateTime timeReceived, ContextBag context) { using (var session = sessionFactory.OpenSession()) using (var tx = session.BeginTransaction(IsolationLevel.ReadCommitted)) { var gatewayMessage = session.Get <DeduplicationMessage>(clientId); if (gatewayMessage != null) { tx.Commit(); return(Task.FromResult(false)); } gatewayMessage = new DeduplicationMessage { Id = clientId, TimeReceived = timeReceived }; try { session.Save(gatewayMessage); tx.Commit(); } catch (GenericADOException) { tx.Rollback(); return(Task.FromResult(false)); } } return(Task.FromResult(true)); }
public bool DeduplicateMessage(string clientId, DateTime timeReceived) { using (var conn = SessionFactory.GetConnection()) using (var session = SessionFactory.OpenSessionEx(conn)) using (var tx = session.BeginAmbientTransactionAware(IsolationLevel.ReadCommitted)) { var gatewayMessage = session.Get <DeduplicationMessage>(clientId); if (gatewayMessage != null) { tx.Commit(); return(false); } gatewayMessage = new DeduplicationMessage { Id = clientId, TimeReceived = timeReceived }; try { session.Save(gatewayMessage); tx.Commit(); } catch (GenericADOException) { tx.Rollback(); return(false); } } return(true); }
public async Task <bool> DeduplicateMessage(string clientId, DateTime timeReceived, ContextBag context) { using (var session = sessionFactory.OpenSession()) using (var tx = session.BeginTransaction(IsolationLevel.ReadCommitted)) { var gatewayMessage = await session.GetAsync <DeduplicationMessage>(clientId) .ConfigureAwait(false); if (gatewayMessage != null) { await tx.CommitAsync() .ConfigureAwait(false); return(false); } gatewayMessage = new DeduplicationMessage { Id = clientId, TimeReceived = timeReceived }; try { await session.SaveAsync(gatewayMessage) .ConfigureAwait(false); await tx.CommitAsync() .ConfigureAwait(false); } catch (ConstraintViolationException) { await tx.RollbackAsync() .ConfigureAwait(false); return(false); } catch (ADOException) { await tx.RollbackAsync() .ConfigureAwait(false); throw; } } return(true); }