将MSMQ消息发送到远程事务队列

4

我是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);
1个回答

4
您可以显式地创建事务。
using (var transaction = new MessageQueueTransaction())
{
    transaction.Begin();
    rqQueue.Send(rqMessage, transaction);
    transaction.Commit();
}

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


我遇到的问题是我没有权限更改这段代码。我们正在使用第三方应用程序,我请求他们提供此代码片段以供审核。因此,我无法真正测试它。我能够编写自己的应用程序并对其进行测试,但问题在于这是一个Web应用程序,我不确定它正在运行的用户,也不确定它试图访问的远程队列是什么。 - user1390125
你需要事务队列的具体原因是什么?如果你不能更改第三方软件,那么你就没有太多其他选择了。 - Kjell-Åke Gafvelin
由于 MessageQueueTransactionIDisposable,因此将其使用包装在 using 语句中是一个好习惯。我已相应地更新了答案。 - Alexander Stepaniuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接