MSDTC无法在群集环境中读取配置

时间:2018-03-28 09:43:14

标签: c# msmq msdtc

很久以前,我已经设置了一个带有MSMQ和使用DTC(也是群集)的集群环境,并且能够使用C#将消息放入队列中没有问题。

今天我需要设置相同的环境,除了使用Windows Server 2012,我设法启动并运行。唯一的问题是,当我尝试在队列中放置一条消息时,应用程序崩溃了以下内容:

  

未处理的异常:System.Transactions.TransactionAbortedException:   交易已中止。 --->   System.Transactions.TransactionException:MSDTC无法读取它   配置信息。 (来自HRESULT的异常:0x8004D027) -        - > System.Runtime.InteropServices.COMException:MSDTC无法读取其配置信息。 (HRESULT的例外情况:   0x8004D027)          在System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String   节点N       ame,Guid resourceManagerIdentifier,IntPtr managedIdentifier,Boolean&节点名称       匹配,UInt32& whereaboutsSize,CoTaskMemHandle& whereaboutsBuffer,IResourceM       anagerShim&安培; 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       ctionOptions属性)          在System.Transactions.TransactionStatePromoted.EnterState(InternalTransactio       n tx)          ---内部异常堆栈跟踪结束---

该应用程序非常简单直接。多次使用它。适用于本地计算机队列,几年前上次使用相同的应用程序在集群中的事务性msmq上发送消息:

var anOrder = new Order { OrderID = 1, ShipToAddress = "123 Abc avenue", ShipToCity = "Seattle", ShipToCountry = "A country", ShipToZipCode = "12345", SubmittedOn = DateTime.UtcNow };

            // create a MessageQueue to tell MSMQ where to send the message and how to connect to it
            var configSettingQueue = ConfigurationManager.AppSettings["MessageQueuePath"];

            var queue = new MessageQueue(configSettingQueue);

            // Create a Message and set the body to the order object above
            var msg = new Message { Body = anOrder };

            // Create a transaction
            using (var ts = new TransactionScope(TransactionScopeOption.Required))
            {
                queue.Send(msg, MessageQueueTransactionType.Automatic); // send the message
                ts.Complete(); // complete the transaction
            }

有什么想法吗? DTC允许传入和传出事务,也不需要身份验证。

难倒!

在事件查看器中,我得到了这个:

Failed to initialize the needed name objects. Error Specifics: hr = 0x80004005, com\complus\dtc\dtc\msdtcprx\src\dtcinit.cpp:575, CmdLine: DNCDispatcher.exe, Pid: 1812

没有安装或使用SQL。只是群集的MSMQ。

1 个答案:

答案 0 :(得分:1)

一小时后......明白了。 您需要以管理员/提升的权限运行应用程序。

YUP。那很有效。