2010-12-08 2 views
7

Ich erhalte den Fehler "Die angeforderte Nachricht wurde in der angegebenen Warteschlange nicht gefunden", wenn Transaktionen in remote MSMQ verwendet werden. Wenn die Transaktion entfernt wird oder wenn die Warteschlange auf denselben Computer verschoben wird, funktioniert alles einwandfrei. Die Warteschlange befindet sich auf Windows 2008-Computer und der Client (Code unten) wird auf Windows 7-Computer ausgeführt.Remote-MSMQ, Transaktionen und ReceiveById schlägt fehl - "Die angeforderte Nachricht wurde nicht in der angegebenen Warteschlange gefunden"

//Throws above error     
using (MessageQueueTransaction mqTxn = new MessageQueueTransaction()) 
{ 
    mqTxn.Begin(); 

    Message message = messageQueue.ReceiveById(peekedMessage.Id, mqTxn); 

    mqTxn.Abort(); 
} 

//Throws above error 
using (TransactionScope txnScope = new TransactionScope()) 
{ 
    Message message = messageQueue.ReceiveById(peekedMessage.Id, MessageQueueTransactionType.Automatic); 
} 

//Works fine 
Message message = messageQueue.ReceiveById(peekedMessage.Id); 

P.S. peekedMessage sind Nachrichten, die kurz vor diesen Aufrufen angezeigt werden. Ich habe überprüft, dass die peekedMessage.Id mit dem ersten Element der Warteschlange übereinstimmt. Die Warteschlange ist transaktional.

Antwort

8

MessageQueueTransaction kann nur für interne Transaktionen verwendet werden, so dass es im Fall einer fernen Warteschlange nicht funktioniert.

Der zweite Weg (mit TransactionScope) würde funktionieren, wie es DTC verwendet. Der Fehlercode sollte an beiden Enden ausgeführt und ordnungsgemäß konfiguriert sein. Standardmäßig ist DTC sowohl in Windows 2008 als auch in Windows 7 deaktiviert. Außerdem muss der DTC bei aktivierter Firewall in die Ausnahmeliste gesetzt werden. Sobald das erledigt ist, wirkt es wie ein Zauber.

Verwandte Themen