MSMQ messages disappear when they get to remote server

萝らか妹 提交于 2020-01-02 16:54:06

问题


I have to create a MSMQ messaging mechanism between two servers in the same domain, SenderServer (MS Server 2012) and ReceiverServer (MS Server 2008 R2).

I created a private, transactional queue in ReceiverServer .\private$\receiver, I gave receive (and peek) message rights to system and administrators.

I then created a client application that creates and forwards messages to the queue by using the following code:

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

Before deploying the application, I tested it from my machine (Windows 7) that correctly creates an outgoing queue Direct=OS:ReceiverServer\private$\receiver with State:Connected and Connection History:Connection is ready to transfer messages. The messages are correctly sent to the ReceiverServer and placed in the \private$\receiver queue. The End2End log of the ReceiverServer for every message logs two events:

  1. Message came over network (EventId: 4)
  2. Message with ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other] was put into queue ReceiverServer\private$\receiver (EventId: 1)

Then I used the client application from within the SenderServer using the same code. The server correctly creates an outgoing queue Direct=OS:ReceiverServer\private$\receiver with State:Connected and Connection History:Connection is ready to transfer messages, I can see the message queuing up and be sent but I do not receive them in the remote ReceiverServer queue .\private$\receiver. If I check the End2End event log of the ReceiverServer I just see the first message (Message came over network (EventId: 4)) but the message is not placed in the queue.

I turned off firewalls from both machines, changed the authorization settings for the queue and tried the following endpoint for the queues:

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

With no luck. The troubleshooting process and the documentation from Microsoft are really general and simplistic, therefore I decided to ask here because for me is a dead end.


回答1:


The sender domain account needs to have the following permissions on the remote queue: Send, Get Permissions, Get Properties

Are these machines on the same domain? If not you may need to grant the above permissions to the local user called ANONYMOUS LOGON




回答2:


I ran into a similar problem and spend a few hours resolving it, so I wanted to post an answer to save others who may fall into the same trap I did.

When the queue was created on the remote server, it was mistakenly created as a transactional queue. However the code that was posting the messages was calling send without the transaction parameter. I could see the message at the sending workstation, but once it hit the destination server, it would disappear without any logging, journaling, or events to help determine why.

Once I identified the problem, I recreated the Queue as a non-transactional queue, and the issue was fixed.



来源:https://stackoverflow.com/questions/28071839/msmq-messages-disappear-when-they-get-to-remote-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!