2010-12-08 8 views
7

Recibo un mensaje de error "No se ha encontrado el mensaje solicitado en la cola especificada" cuando se usan transacciones en MSMQ remoto. Si se elimina la transacción o si la cola se mueve a la misma máquina, todo funciona bien. La cola está en la máquina con Windows 2008 y el cliente (código que se muestra a continuación) se ejecuta en la máquina con Windows 7.MSMQ remoto, Transactions y ReceiveById failed - "El mensaje solicitado no se encontró en la cola especificada"

//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 es un mensaje que se asoma justo antes de estas llamadas. He verificado que peekedMessage.Id coincide con el primer elemento de cola. La cola es transaccional.

Respuesta

8

MessageQueueTransaction solo se puede usar para transacciones internas, por lo que no funcionará en el caso de la cola remota.

La segunda forma (usando TransactionScope) funcionaría ya que usa DTC. DTC debería estar ejecutándose y configurarse correctamente en ambos extremos. De forma predeterminada, DTC está desactivado tanto en Windows 2008 como en Windows 7. Además, si el firewall está activado, DTC se colocará en la lista de excepciones. Tan pronto como se hace, funciona como un encanto.

Cuestiones relacionadas