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:
- Mensagem enviada pela rede (EventId: 4)
- 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.