【发布时间】:2015-03-20 05:53:07
【问题描述】:
我必须在同一域中的两台服务器之间创建 MSMQ 消息传递机制,SenderServer (MS Server 2012) 和 ReceiverServer (MS服务器 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) 上对其进行了测试,该机器正确地创建了带有State:Connected 和Connection History:Connection is ready to transfer messages 的传出队列Direct=OS:ReceiverServer\private$\receiver。
消息正确地发送到 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 中使用客户端应用程序。服务器使用State:Connected 和Connection History:Connection is ready to transfer messages 正确创建了一个传出队列Direct=OS:ReceiverServer\private$\receiver,我可以看到消息排队并被发送,但我没有在远程ReceiverServer 队列.\private$\receiver 中收到它们.如果我检查 ReceiverServer 的 End2End 事件日志,我只会看到第一条消息(消息来自网络 (EventId: 4)),但该消息未放入队列.
我关闭了两台机器的防火墙,更改了队列的授权设置并尝试了队列的以下端点:
FormatName:Direct=OS:[IPv6 address]\private$\receiverFormatName:Direct=TCP:ReceiverServer\private$\receiverFormatName:Direct=TCP:[IPv6 address]\private$\receiver
没有运气。 Microsoft 的故障排除过程和文档非常笼统和简单,因此我决定在这里问,因为对我来说是死胡同。
【问题讨论】:
标签: msmq system.messaging