Я должен создать 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 для каждого сообщения регистрируется два события:
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)), но сообщение не помещается в очередь.
Я отключил брандмауэры на обеих машинах, изменил настройки авторизации для очереди и попробовал следующую конечную точку для очередей:
FormatName:Direct=OS:[IPv6 address]\private$\receiver
FormatName:Direct=TCP:ReceiverServer\private$\receiver
FormatName:Direct=TCP:[IPv6 address]\private$\receiver
Не повезло. Процесс устранения неполадок и документация от Microsoft действительно общие и упрощенные, поэтому я решил спросить здесь, потому что для меня это тупик.
Я предлагаю вам установить UserDeadLetterQueue
свойство к сообщению. После этого вы можете проверить Transactional dead-letter messages
системная очередь на исходном и целевом серверах из управления компьютером. В столбце «класс» описывается, почему сообщение не может быть доставлено.