2010-12-08 10 views
7

私は、リモートMSMQでトランザクションを使用しているときにエラー「要求されたメッセージは、指定したキューに見つかりませんでした」取得しています「要求されたメッセージは、指定したキューに見つかりませんでした」。トランザクションが削除された場合、またはキューが同じマシンに移動された場合、すべて正常に動作します。キューは、Windows 2008マシン上にあり、クライアント(以下のコード)は、Windows 7マシン上で実行されます。リモートMSMQ、トランザクションとReceiveByIdが失敗したが -

//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は、これらの呼び出しの直前に覗き込まれたメッセージです。 peekedMessage.Idが最初のキューアイテムと一致することを確認しました。キューはトランザクションです。それはリモート・キューケースでは動作しませんので

答えて

8

MessageQueueTransactionは、内部取引のために使用することができます。

がDTCを使用するように(のTransactionScopeを使用して)第二の方法はうまくいきます。 DTCが実行され、両端で正しく構成されている必要があります。デフォルトでは、DTCは、ファイアウォールがオンになっている場合、DTCは例外リストに入れることがあるほかのWindows 2008およびWindows 7の両方でオフになっています。それが終わるとすぐに、それは魅力のように動作します。

関連する問題