Назад | Перейти на главную страницу

Сообщения MSMQ исчезают, когда попадают на удаленный сервер

Я должен создать MSMQ механизм обмена сообщениями между двумя серверами в одном домене, SenderServer (MS Server 2012) и ReceiverServer (MS Server 2008 R2).

Я создал частную очередь транзакций в ReceiverServer .\private$\receiverЯ дал права на получение (и просмотр) сообщений системе и администраторам.

Затем я создал клиентское приложение, которое создает и пересылает сообщения в очередь, используя следующий код:

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();
}

Перед развертыванием приложения я протестировал его на своей машине (Windows 7), которая правильно создает исходящую очередь Direct=OS:ReceiverServer\private$\receiver с участием State:Connected и Connection History:Connection is ready to transfer messages. Сообщения правильно отправлены на ReceiverServer и помещен в \private$\receiver очередь. В End2End log из ReceiverServer для каждого сообщения регистрируется два события:

  1. Сообщение пришло по сети (EventId: 4)
  2. Сообщение с ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other] был поставлен в очередь ReceiverServer\private$\receiver (EventId: 1)

Затем я использовал клиентское приложение из SenderServer используя тот же код. Сервер правильно создает исходящую очередь Direct=OS:ReceiverServer\private$\receiver с участием State:Connected и Connection History:Connection is ready to transfer messages, Я вижу, что сообщения стоят в очереди и отправляются, но я не получаю их на удаленном ReceiverServer очередь .\private$\receiver. Если я проверю Журнал событий End2End из ReceiverServer Я вижу только первое сообщение (сообщение пришло по сети (EventId: 4)), но сообщение не помещается в очередь.

Я отключил брандмауэры на обеих машинах, изменил настройки авторизации для очереди и попробовал следующую конечную точку для очередей:

Не повезло. Процесс устранения неполадок и документация от Microsoft действительно общие и упрощенные, поэтому я решил спросить здесь, потому что для меня это тупик.

Я предлагаю вам установить UserDeadLetterQueue свойство к сообщению. После этого вы можете проверить Transactional dead-letter messages системная очередь на исходном и целевом серверах из управления компьютером. В столбце «класс» описывается, почему сообщение не может быть доставлено.