Why am I getting error System.Messaging.MessageQueueException: Cannot enlist the transaction.

780 views
Skip to first unread message

John

unread,
Apr 27, 2016, 1:10:24 PM4/27/16
to Particular Software
I have been looking for a solution for this error and want to finally ask for help here.
Why am I getting this error intermittently. Answers on SO point to increasing the transaction timeout for MSDTC.

However, I am not using MSDTC, I am not actively coding with TransactionScope or Transaction. The endpoint and the database are on the same machine. One database.
There is nothing fancy about this endpoint, it just has an Entity Framework DbContext injected, and everything works 99% of the time.

From the stacktrace I can tell that something else went wrong in the endpoint, and the MessageQueueException is thrown attempting to publish an event to another endpoint.

At what point does this exception get thrown, and why is it not possible to "enlist the transaction"?

I don't believe this is related to MSMQ itself not being able to write to the disk, etc.

The settings for SLR are default values, so I am not sure why there is 50minutes between the time the message was sent and the failure.


What can I do to pinpoint this?

<HeaderInfo>
<Key>NServiceBus.Version</Key>
<Value>5.2.14</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.TimeSent</Key>
<Value>2016-04-27 12:27:39:378169 Z</Value>
</HeaderInfo>
<HeaderInfo>
<Key>NServiceBus.TimeOfFailure</Key>
<Value>2016-04-27 13:17:40:233701 Z</Value>
</HeaderInfo>

This is for NSB 5.2.14, though earlier versions show the same behaviour.

Thanks for your help.

Stacktrace:


    <HeaderInfo>
        <Key>NServiceBus.ExceptionInfo.StackTrace</Key>
        <Value>System.Exception: Failed to send message to address: Monitor@OUR_SERVER ---> System.Messaging.MessageQueueException: Cannot enlist the transaction.
   at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
   at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message, SendOptions sendOptions)
   --- End of inner exception stack trace ---
   at NServiceBus.Transports.Msmq.MsmqMessageSender.ThrowFailedToSendException(Address address, Exception ex)
   at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message, SendOptions sendOptions)
   at NServiceBus.Unicast.Publishing.StorageDrivenPublisher.Publish(TransportMessage message, PublishOptions publishOptions)
   at NServiceBus.DispatchMessageToTransportBehavior.InvokeNative(DeliveryOptions deliveryOptions, TransportMessage messageToSend)
   at NServiceBus.DispatchMessageToTransportBehavior.Invoke(OutgoingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.SerializeMessagesBehavior.Invoke(OutgoingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.CreatePhysicalMessageBehavior.Invoke(OutgoingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.PopulateAutoCorrelationHeadersForRepliesBehavior.Invoke(OutgoingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.Invoke()
   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context)
   at NServiceBus.Pipeline.PipelineExecutor.InvokeSendPipeline(DeliveryOptions deliveryOptions, LogicalMessage message)
   at Company.Namespace.SomeServiceBase`1.TraceUnexpectedError(Exception e, StoreModel s)
   at Company.Namespace.SomeServiceBase`1.DoSomethingByFileGroup(DoSomethingCommand message)
   at lambda_method(Closure , Object , Object )
   at NServiceBus.Unicast.MessageHandlerRegistry.Invoke(Object handler, Object message, Dictionary`2 dictionary)
   at NServiceBus.InvokeHandlersBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.DataBusReceiveBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.SetCurrentMessageBeingHandledBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.LoadHandlersBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.ExecuteLogicalMessagesBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.Persistence.NHibernate.OpenSessionBehavior.InnerInvoke(BehaviorContext context, Action next, Func`1 connectionRetriever)
   at NServiceBus.Persistence.NHibernate.OpenSessionBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.UnitOfWorkBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.Persistence.NHibernate.OpenSqlConnectionBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.ChildContainerBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.ProcessingStatisticsBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.<>c__DisplayClass4_0.<InvokeNext>b__0()
   at NServiceBus.AuditBehavior.Invoke(IncomingContext context, Action next)
   at NServiceBus.BehaviorChain`1.InvokeNext(T context)
   at NServiceBus.BehaviorChain`1.Invoke()
   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context)
   at NServiceBus.Unicast.Transport.TransportReceiver.OnTransportMessageReceived(TransportMessage msg)
   at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage message)
   at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage message)
   at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action()</Value>
    </HeaderInfo>

Tim

unread,
Apr 29, 2016, 8:25:52 AM4/29/16
to Particular Software
Is this failing message sent to a remote machine? In that case, have you already used DTCPing to check for potential issues? We have some documentation about this here: http://docs.particular.net/nservicebus/operations/transactions-message-processing#distributed-transaction-coordinator

Sidenote: If you don't rely on distributed transactions, you could always disable them (but be aware of the implications!). You may want to read more about our transport transaction settings: http://docs.particular.net/nservicebus/transports/transactions

Cheers,
Tim
Reply all
Reply to author
Forward
0 new messages