很久以前,我已经设置了一个带有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。
答案 0 :(得分:1)
一小时后......明白了。 您需要以管理员/提升的权限运行应用程序。
YUP。那很有效。