Mensagens MSMQ desaparecem quando chegam ao servidor remoto

1

Eu tenho que criar um mecanismo de mensagens MSMQ entre dois servidores no mesmo domínio, SenderServer (MS Server 2012) e ReceiverServer (MS Server 2008 R2).

Eu criei uma fila privada e transacional em ReceiverServer .\private$\receiver , dei direitos de mensagem de recebimento (e espreitar) ao sistema e aos administradores.

Eu, então, criei um aplicativo cliente que cria e encaminha mensagens para a fila usando o seguinte código:

MessageQueue queue = new queue("FormatName:Direct=OS:ReceiverServer\private$\receiver");
Message message = new Message();
message.Body = "myMessage";

using (MessageQueueTransaction tx = new MessageQueueTransaction())
{
  tx.Begin();
  queue.Send(message, "myLabel", tx);
  tx.Commit();
}

Antes de implantar o aplicativo, testei-o do meu computador (Windows 7) que cria corretamente uma fila de saída Direct=OS:ReceiverServer\private$\receiver com State:Connected e Connection History:Connection is ready to transfer messages . As mensagens são enviadas corretamente para o ReceiverServer e colocadas na fila \private$\receiver . O End2End log do ReceiverServer para cada mensagem registra dois eventos:

  1. Mensagem enviada pela rede (EventId: 4)
  2. A mensagem com ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other] foi colocada na fila ReceiverServer\private$\receiver (EventId: 1)

Então eu usei o aplicativo cliente de dentro do SenderServer usando o mesmo código. O servidor cria corretamente uma fila de saída Direct=OS:ReceiverServer\private$\receiver com State:Connected e Connection History:Connection is ready to transfer messages , posso ver a mensagem sendo enfileirada e enviada, mas não as recebo na fila remota ReceiverServer .\private$\receiver . Se eu verificar o log de eventos End2End do ReceiverServer , só vejo a primeira mensagem (Mensagem veio pela rede (EventId: 4)) mas a mensagem não é colocada na fila .

Eu desliguei os firewalls de ambas as máquinas, alterei as configurações de autorização da fila e tentei o seguinte endpoint para as filas:

  • FormatName:Direct=OS:[IPv6 address]\private$\receiver
  • FormatName:Direct=TCP:ReceiverServer\private$\receiver
  • FormatName:Direct=TCP:[IPv6 address]\private$\receiver

Sem sorte. O processo de solução de problemas e a documentação da Microsoft são realmente gerais e simplistas, por isso decidi perguntar aqui porque para mim é um beco sem saída.

    
por CiccioMiami 21.01.2015 / 17:06

1 resposta

0

Sugiro que você defina a propriedade UserDeadLetterQueue para a mensagem. Depois disso, você pode verificar a fila do sistema Transactional dead-letter messages no servidor de origem e de destino do Gerenciamento do Computador. Há uma coluna 'class' que descreve por que a mensagem não pôde ser entregue.

    
por 03.03.2015 / 09:58