【问题标题】:MSMQ Distributed Transaction (DTC) cannot import transactionMSMQ 分布式事务 (DTC) 无法导入事务
【发布时间】:2015-07-02 15:59:08
【问题描述】:

我需要在一个事务中接收、处理和发送消息。由于 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 进行事务处理?从我目前找到的样本中无法判断...

【问题讨论】:

    标签: msmq msmq-transaction


    【解决方案1】:

    显然必须安装和配置 DTC 以允许客户端和服务器上的网络访问。这样,这个 sn-p 就可以正常工作了:

    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();
                                }
                            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2010-11-03
      • 2018-04-22
      • 1970-01-01
      • 2022-12-18
      • 2010-12-08
      • 2012-08-31
      相关资源
      最近更新 更多