NServiceBus 无法接收消息 [英] NServiceBus unable to receive message
问题描述
我正在遵循 NServiceBus 入门指南(第 5 版),但出现以下错误.
I'm following the NServiceBus getting started guide (version 5) and I get the below error.
当客户端向服务器发送命令时,服务器无法接收消息.代码没问题,因为另一台机器上的完全相同的代码正在运行.所以我的机器上缺少一些东西.
When the client sends a command to the server, the server has issues to receive the message. The code is okay, because the exact same code on another machine is working. So something is missing on my machine.
我确实运行了教程中提到的这个命令:
I did run this command as is mentioned in the tutorial:
DISM.exe/Online/NoRestart/English/Enable-Feature/all/FeatureName:MSMQ-Server
DISM.exe /Online /NoRestart /English /Enable-Feature /all /FeatureName:MSMQ-Server
但是还是不行.
2016-11-01 19:50:47.316 错误ServiceBus.Transports.Msmq.MsmqDequeueStrategy 接收消息时出错.System.Transactions.TransactionAbortedException:事务已中止.---> System.Transactions.TransactionManagerCommunicationException: 与底层事务管理器的通信失败.---> System.Runtime.InteropServices.COMException:事务管理器不可用.(来自 HRESULT 的异常:0x8004D01B)在 System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& nodeName Matches, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceManagerShim& resourceManagerShim)在 System.Transactions.Oletx.DtcTransactionManager.Initialize()--- 内部异常堆栈跟踪结束 ---在 system.Transactions.Oletx.OletxTransactionManager.ProxyException(COMExcept离子 comException)在 System.Transactions.Oletx.DtcTransactionManager.Initialize()在 System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory()在 System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(Transa操作选项属性)在 System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction tx)--- 内部异常堆栈跟踪结束 ---在 System.Transactions.TransactionStateAborted.CheckForFinishedTransaction(In内部交易 tx)在 System.Transactions.EnlistableStates.Promote(InternalTransaction tx)在 System.Transactions.Transaction.Promote()在 System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transacti交易时)在 System.Transactions.TransactionInterop.GetDtcTransaction(Transaction trans行动)在 System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 超时,Int32 动作,MQPROPS 属性,NativeOverlapped* 重叠,ReceiveCallback 接收iveCallback、CursorHandle cursorHandle、IntPtr 事务)在 System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 actionn、CursorHandle 游标、MessagePropertyFilter 过滤器、MessageQueueTransaction 中ternalTransaction, MessageQueueTransactionType transactionType)在 System.Messaging.MessageQueue.Receive(TimeSpan timeout, MessageQueueTransa动作类型交易类型)在 C:\Bu 中的 NServiceBus.Transports.Msmq.MsmqDequeueStrategy.b__12_1()ildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueS策略.cs:第 248 行在 NServiceBus.Transports.Msmq.MsmqDequeueStrategy.TryReceiveMessage(Func`1 r接收,消息&消息)在 C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 332
2016-11-01 19:50:47.316 ERROR ServiceBus.Transports.Msmq.MsmqDequeueStrategy Error in receiving messages. System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException: The Transaction Manager is not available. (Exception from HRESULT: 0x8004D01B) at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& nodeName Matches, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceManagerShim& resourceManagerShim) at System.Transactions.Oletx.DtcTransactionManager.Initialize() --- End of inner exception stack trace --- at system.Transactions.Oletx.OletxTransactionManager.ProxyException(COMExcept ion comException) at System.Transactions.Oletx.DtcTransactionManager.Initialize() at System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory() at System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(Transa ctionOptions properties) at System.Transactions.TransactionStatePromoted.EnterState(InternalTransactio n tx) --- End of inner exception stack trace --- at System.Transactions.TransactionStateAborted.CheckForFinishedTransaction(In ternalTransaction tx) at System.Transactions.EnlistableStates.Promote(InternalTransaction tx) at System.Transactions.Transaction.Promote() at System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transacti on transaction) at System.Transactions.TransactionInterop.GetDtcTransaction(Transaction trans action) at System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 timeout, Int3 2 action, MQPROPS properties, NativeOverlapped* overlapped, ReceiveCallback rece iveCallback, CursorHandle cursorHandle, IntPtr transaction) at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 actio n, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction in ternalTransaction, MessageQueueTransactionType transactionType) at System.Messaging.MessageQueue.Receive(TimeSpan timeout, MessageQueueTransa ctionType transactionType) at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.b__12_1() in C:\Bu ildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueS trategy.cs:line 248 at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.TryReceiveMessage(Func`1 r eceive, Message& message) in C:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus .Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 332
推荐答案
对我来说,问题是 Distributed Transaction Coordinator 服务已关闭.开启后一切正常.
For me the issue was that the service Distributed Transaction Coordinator was turned off. After turning it on everything works as expected.
这篇关于NServiceBus 无法接收消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!