1

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.

CiccioMiami
  • 209
  • 1
  • 3
  • 12

1 Answers1

0

I suggest that you set UserDeadLetterQueue property to message. After that, you can check Transactional dead-letter messages system queue on both source and target server from Computer Management. There's 'class' column which describes why message could not be delivered.