コード例 #1
0
        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;
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }