我正在创建一个从 MSMQ 获取消息的 C# 和 WCF 服务。
这是使用事务性 MSMQ。在业务逻辑中,有一个条件,然后该条件将一条新消息放在不同的事务队列中,但是我似乎总是抛出异常并且不知道从这里去哪里
“System.Transactions.TransactionAbortedException:事务已中止。\r\n 在 System.Transactions.TransactionStatePromotedAborted.CreateAbortingClone(InternalTransaction tx)\r\n 在 System.Transactions.DependentTransaction..ctor(IsolationLevel isoLevel, InternalTransaction internalTransaction, 布尔阻塞)\r\n 在 System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption)\r\n 在 System.Transactions.TransactionScope.SetCurrent(Transaction newCurrent)\r\n 在 System.Transactions.TransactionScope.PushScope()\r\ n 在 System.Transactions.TransactionScope..ctor(TransactionScopeOption scopeOption)\r\n 在 E:\Msmq\MsmqDispatcher 中的 TMC.Services.Implementation.InboundMessageHandler.Msmq.MsmqDispatcher.Dispatch(String queueFormatAndLocation, Object itemToPlaceOnQueue, Boolean traceMessage)。 cs:第 39 行\r\n 在 TMC.Services。Implementation.InboundMessageHandler.OmhDispatcher.AckNackDispatcher.SendAckTo
E:\AckNackDispatcher.cs:第 38 行中的 Tg(SendAckToTgRequest 请求)"
有什么想法吗?
将其放入队列时的代码:
var queue = new MessageQueue(queueFormatAndLocation);
var msg = new System.Messaging.Message {Body = itemToPlaceOnQueue, Priority = MessagePriority.High, UseDeadLetterQueue = true, UseTracing = traceMessage};
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
queue.Send(msg, MessageQueueTransactionType.Automatic); // send the message
ts.Complete(); // complete the transaction
}
就 queueFormatAndLocation 而言,它是正确的:
“格式名称:Direct=OS:.\private$\AckMsgs”