0

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, Boolean ブロッキングで)\r\n System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption) で\r\n System.Transactions.TransactionScope.SetCurrent(Transaction newCurrent) で\r\n System.Transactions.TransactionScope.PushScope() で\r\ n at System.Transactions.TransactionScope..ctor(TransactionScopeOption scopeOption)\r\n at TMC.Services.Implementation.InboundMessageHandler.Msmq.MsmqDispatcher.Dispatch(String queueFormatAndLocation, Object itemToPlaceOnQueue, Boolean traceMessage) in E:\Msmq\MsmqDispatcher. cs:TMC.Services の 39 行目\r\n。Implementation.InboundMessageHandler.OmhDispatcher.AckNackDispatcher.SendAckTo

E:\AckNackDispatcher.cs:line 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 に関しては、正しいです。

"FormatName:Direct=OS:.\private$\AckMsgs"

4

1 に答える 1