我正在使用下面的代码将队列中的所有消息都发送到数组并发送到阵列中的其他队列,发生的事情是它将每条消息两次发送到每个队列,我看不清楚原因,可以有人看到任何明显的东西吗?
感谢
public void SendToQs()
{
Code.Class1 c = new Code.Class1();
oInQueue = new MessageQueue(sInQueue);
Message[] msgs = oInQueue.GetAllMessages();
var queueArray = sOutQueues.Select(s => new MessageQueue(s)).ToArray();
foreach (Message msg in msgs)
{
foreach (MessageQueue s in queueArray)
{
c.WriteMessage(s, msg, msg.Label);
}
}
oInQueue.Purge();
}
的WriteMessage:
public void WriteMessage(MessageQueue outputQueue, Message msg, string label)
{
if (!outputQueue.Transactional)
{
try
{
outputQueue.Send(msg, label);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
MessageQueueTransaction trans = new MessageQueueTransaction();
try
{
trans.Begin();
outputQueue.Send(msg, label, trans);
trans.Commit();
}
catch (Exception ex)
{
Console.WriteLine("message Q exception" + ex.Message);
trans.Abort();
}
}
}
答案 0 :(得分:1)
得到它,这是我所期待的愚蠢! 在我的虚空Main()中,我最初启动了一个过程,以确保它有效。 然后我添加了一行来用这个过程启动一个新线程,忘记取出原来的一个,所以它运行了两次。 DOH!
答案 1 :(得分:0)
我没有时间对此进行测试,但您可能需要考虑这一点。
如果一个队列将所有消息发送到其他队列,那么,当迭代队列列表时 - 原始队列也会发送此消息。
foreach (Message msg in msgs)
{
foreach (MessageQueue s in queueArray)
{
if (s.Id == oInQueue.Id) continue; // Skip if this is the originator
c.WriteMessage(s, msg, msg.Label);
}
}