【问题标题】:MSMQ messages disappear when they get to remote serverMSMQ 消息在到达远程服务器时消失
【发布时间】: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:ConnectedConnection History:Connection is ready to transfer messages 的传出队列Direct=OS:ReceiverServer\private$\receiver。 消息正确地发送到 ReceiverServer 并放入 \private$\receiver 队列中。每条消息的ReceiverServerEnd2End log 记录两个事件:

  1. 消息来自网络 (EventId: 4)
  2. 带有ID CN=msmq, CN=[mymachinename], CN=Computers, DC=[domain], DC=[other] 的消息被放入队列ReceiverServer\private$\receiver (EventId: 1)

然后我使用相同的代码从 SenderServer 中使用客户端应用程序。服务器使用State:ConnectedConnection History:Connection is ready to transfer messages 正确创建了一个传出队列Direct=OS:ReceiverServer\private$\receiver,我可以看到消息排队并被发送,但我没有在远程ReceiverServer 队列.\private$\receiver 中收到它们.如果我检查 ReceiverServerEnd2End 事件日志,我只会看到第一条消息(消息来自网络 (EventId: 4)),但该消息未放入队列.

我关闭了两台机器的防火墙,更改了队列的授权设置并尝试了队列的以下端点:

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

没有运气。 Microsoft 的故障排除过程和文档非常笼统和简单,因此我决定在这里问,因为对我来说是死胡同。

【问题讨论】:

    标签: msmq system.messaging


    【解决方案1】:

    发件人域帐户需要对远程队列具有以下权限:发送、获取权限、获取属性

    这些机器是否在同一个域中?如果没有,您可能需要将上述权限授予名为 ANONYMOUS LOGON 的本地用户

    【讨论】:

    • 你成功了,谢谢!但它并没有解释为什么它在我的 Windows 7 机器上工作......
    • 好的,发现了原因。该消息是使用我的帐户从我的机器发送的,该帐户在接收者队列中具有正确的权限:)
    【解决方案2】:

    我遇到了类似的问题并花了几个小时解决了它,所以我想发布一个答案来拯救可能落入与我相同的陷阱的其他人。

    在远程服务器上创建队列时,它被错误地创建为事务队列。但是,发布消息的代码在没有事务参数的情况下调用了 send。我可以在发送工作站看到该消息,但是一旦它到达目标服务器,它就会消失,没有任何日志、日志或事件来帮助确定原因。

    确定问题后,我将队列重新创建为非事务性队列,问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2010-12-20
      • 2012-05-20
      • 2012-02-12
      • 1970-01-01
      • 2012-04-12
      • 2012-04-12
      相关资源
      最近更新 更多