MSMQ分布式事务(DTC)无法导入事务

时间:2015-04-24 07:05:55

标签: msmq msmq-transaction

我需要在一次交易中接收,处理和发送消息。由于MSMQ不支持事务性远程接收,我使用DTC。现在,我甚至无法收到消息。这是我用于此的代码:

string queueName = "trxwrite";
string serverName = "mqtest";

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    MessageQueue mq = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queueName));
    mq.Formatter = new XmlMessageFormatter(new[] {typeof (string)});

    Message message = mq.Receive(MessageQueueTransactionType.Automatic);
    ts.Complete();
}
  • 队列是事务性的。
  • 在服务器mqtest上启用DTC 并配置为允许入站和出站。
  • 防火墙设置为允许所有MSMQ和DTC请求。

我收到以下错误消息:无法导入事务。 有人可以帮忙吗? 另外,我的客户机如何知道它应该在服务器上使用DTC进行交易?从目前为止我找到的样本中无法说出......

1 个答案:

答案 0 :(得分:0)

显然,必须安装和配置DTC以允许客户端和服务器上的网络访问。这样,这个代码段工作正常:

string queueName = "trxwrite";
string queue2Name = "trxread";
string serverName = "mqtest";
Parallel.For(0, 300, (int i) =>
                        {
                            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
                            {
                                MessageQueue mq = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queueName));
                                mq.Formatter = new XmlMessageFormatter(new[] { typeof(DateTime) });

                                Message message = mq.Receive(MessageQueueTransactionType.Automatic);
                                DateTime createDt = (DateTime)message.Body;

                                MessageQueue mq2 = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queue2Name));
                                mq2.Formatter = new XmlMessageFormatter(new[] { typeof(DateTime) });

                                Message messageToSend = new Message(createDt);
                                mq2.Send(messageToSend, MessageQueueTransactionType.Automatic);

                                ts.Complete();
                            }
                        });