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"