C# MSMQ忽略事务作用域

C# MSMQ忽略事务作用域,c#,msmq,transactionscope,C#,Msmq,Transactionscope,我正在尝试从MSMQ专用队列读取数据,并尝试测试一个失败,这样我就可以确信,如果进程没有完成,那么详细信息将保留在队列中。此时,在我的事务范围内,它命中了我的抛出新异常行,并按预期放入catch块,但看起来好像事务.Complete运行,因为抛出异常后,队列为空:下面是我的代码片段- try { using (TransactionScope transaction = new TransactionScope()) {

我正在尝试从MSMQ专用队列读取数据,并尝试测试一个失败,这样我就可以确信,如果进程没有完成,那么详细信息将保留在队列中。此时,在我的事务范围内,它命中了我的抛出新异常行,并按预期放入catch块,但看起来好像事务.Complete运行,因为抛出异常后,队列为空:下面是我的代码片段-

try
        {

            using (TransactionScope transaction = new TransactionScope())
            {

                Message incoming = new Message
                {
                    Formatter = formatter,
                    AcknowledgeType = AcknowledgeTypes.FullReceive,
                    Recoverable = true

                };

                incoming = msgQ.Receive(new TimeSpan(0, 0, 3), MessageQueueTransactionType.Single);

                if (incoming != null)
                {
                    MemoryStream mem = (MemoryStream) incoming.BodyStream;
                    mem.Seek(0, SeekOrigin.Begin);
                    IFormatter ifm = new BinaryFormatter();
                    var deserialisedMessage = (TravelMessageServiceObjects) ifm.Deserialize(mem); 
                    ISubmissionsService submissionsService = new SubmissionsService();
                    bool retVal = submissionsService.PerformSubmission(deserialisedMessage.Products, deserialisedMessage.PolicyReference);
                    if (!retVal)
                    {

                        string errorMessage = string.Concat("Policy Ref: ", deserialisedMessage.PolicyReference,
                            " Product: ", Enum.GetName(typeof(Products), deserialisedMessage.Products));
                        throw new Exception(errorMessage);
                    }
                }
                transaction.Complete();
            }

        }
        catch (Exception ex)
        {
            IError logger = new Logger();
            logger.Log(this, SeverityEnum.Warning, ex);

        }

将队列创建为事务性队列

并将
MessageQueueTransactionType
设置为
Automatic
<代码>单个仅适用于内部消息队列事务

incoming = msgQ.Receive(new TimeSpan(0, 0, 3), MessageQueueTransactionType.Automatic);
检查,正在工作


检查,防火墙不阻止通信

是,这是事务性的。我还尝试将transactionScope类更改为MessageQueueTransaction。MessageQueueTransaction=新建MessageQueueTransaction();尝试{transaction.Begin();消息传入=msgq.Receive(新的时间跨度(0,0,3),事务);现在我在的接收行上收到一个错误:事务操作序列无效。我已将transactionType设置为自动,现在我收到以下错误:无法导入事务。@bilpor最好检查processOk中包含的所有服务器上的MSDTC是否工作。在承载MSMQ的服务器上,我已设置了MSDTC以供使用服务器名为“MessagingServer”的本地协调器。在尝试从队列读取的计算机上,我已将远程协调器主机名设置为“MessagingServer”。现在,当我尝试运行时,收到以下错误:与基础事务管理器的通信失败