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 Noden AME, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& NodeName спички, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceM anagerShim& resourceManagerShim) в System.Transactions.Oletx.DtcTransactionManager.Initialize() --- Конец внутренней трассировки стека исключений --- в System.Transactions.Oletx.OletxTransactionManager.ProxyException(COMExcept ion 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 ответ
Через час... разобрался. Вам необходимо запустить приложение с правами администратора или с повышенными правами.
АГА. Это сработало.