我必须在同一域中的两台服务器SenderServer (MS Server 2012) 和ReceiverServer之间创建MSMQ消息传递机制 (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
队列中。每条消息的ReceiverServer记录两个事件End2End log
:
- 消息来自网络 (EventId: 4)
- 消息
ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other]
已放入队列ReceiverServer\private$\receiver
(EventId:1)
然后我使用相同的代码从SenderServer中使用客户端应用程序。服务器正确地创建了一个传出队列Direct=OS:ReceiverServer\private$\receiver
,我可以看到消息排队并被发送,但我没有在远程State:Connected
ReceiverServer队列中收到它们。如果我检查ReceiverServer的End2End 事件日志,我只会看到第一条消息(消息来自网络(EventId:4)),但该消息未放入队列中。Connection History:Connection is ready to transfer messages
.\private$\receiver
我关闭了两台机器的防火墙,更改了队列的授权设置,并为队列尝试了以下端点:
FormatName:Direct=OS:[IPv6 address]\private$\receiver
FormatName:Direct=TCP:ReceiverServer\private$\receiver
FormatName:Direct=TCP:[IPv6 address]\private$\receiver
没有运气。Microsoft 的故障排除过程和文档非常笼统和简单,因此我决定在这里问,因为对我来说是死胡同。