【问题标题】:Sending MSMQ Message to a remote Transactional Queue将 MSMQ 消息发送到远程事务队列
【发布时间】:2012-05-20 09:24:23
【问题描述】:

我是 MSMQ 的新手,正在尝试将 XML 消息发送到远程事务队列。两台机器都是2003服务器。我可以让它与非事务性远程队列一起工作。我似乎无法将消息放到事务队列中。 C# 代码如下。我没有收到它从未出现过的错误。

Message rqMessage = new Message();
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer( typeof([message type]));

XmlTextWriter writer = new XmlTextWriter(rqMessage.BodyStream, Encoding.UTF8);
ser.Serialize(writer, rqDoc);
rqMessage.Label = "message label";
rqMessage.TimeToBeReceived = Message.InfiniteTimeout;
rqMessage.TimeToReachQueue = Message.InfiniteTimeout;
rqMessage.ResponseQueue = new MessageQueue("Path");
rqMessage.Formatter = new ActiveXMessageFormatter();
MessageQueue rqQueue = new MessageQueue(nodeRequestQueue.SelectSingleNode("Path").InnerText);

bool transactional = false;
try
{
    transactional = rqQueue.Transactional;
}
catch(MessageQueueException)
{
    transactional = false;
}
if ( transactional )
    rqQueue.Send(rqMessage, MessageQueueTransactionType.Single);
else
    rqQueue.Send(rqMessage);

【问题讨论】:

    标签: c# msmq msdtc transactional-queue


    【解决方案1】:

    您可以显式创建事务。

    using (var transaction = new MessageQueueTransaction())
    {
        transaction.Begin();
        rqQueue.Send(rqMessage, transaction);
        transaction.Commit();
    }
    

    对于您正在使用的重载,您可能没有“直接格式名称”并且该选项不受支持。 MSDN

    【讨论】:

    • 我的问题是我无权更改此代码。我们正在使用第三方应用程序,我要求他们提供此代码 sn-p 以对其进行审查。所以,我无法真正测试它。我能够编写自己的应用程序并对其进行测试,我认为问题在于这是一个 Web 应用程序,我不确定它在哪个用户下运行并尝试访问远程队列。
    • 您需要事务队列是否有任何具体原因?如果您无法更改 3rdparty 软件,那么您无能为力。
    • 由于MessageQueueTransactionIDisposable,将它的用法包装到using 语句中是一个很好的做法。我相应地更新了答案。
    猜你喜欢
    • 2012-02-12
    • 2012-07-25
    • 2014-07-29
    • 2012-06-05
    • 2017-04-27
    • 1970-01-01
    • 2015-01-20
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多