MSMQ远程接收错误“指定的格式名称不支持请求的操作”

时间:2017-02-06 16:05:29

标签: sql-server msmq windows-server-2012-r2 transactional-queue

因此遇到了这个奇怪的问题。我试图从未经过身份验证的事务性msmq接收消息。我的环境是:

  • 队列为Windows Server 2012 R2的服务器。这也是数据库服务器(SQL Server)
  • 安装客户端应用程序的服务器也是Windows Server 2012 R2

我正在尝试将消息从SQL Server发送到MSMQ(工作正常)。但是,当客户端应用程序尝试使用下面的代码接收消息时,会抛出我在标题中提到的错误。

private void OnPeekCompleted(object sender, PeekCompletedEventArgs args)
     {
         MessageQueue mq = (MessageQueue)sender;
         if (mq != null)
         {
             try
             {
                 if (Log.IsInfoEnabled)
                 {
                     Log.InfoFormat("[{0}] Starting processing message queue {1}", _endpoint.RouteName, _queue.QueueName);
                 }
                 mq.EndPeek(args.AsyncResult);
                 MessageQueueTransaction transaction = new MessageQueueTransaction();
                 transaction.Begin();
                 Message message = mq.Receive(transaction);
                 ... // omitted for simplicity

我无法从数据库服务器访问客户端服务器,因此我需要在同一个数据库服务器上安装消息队列,因为我将消息从SQL发送到队列

我检查过以下内容:

  1. 从SQL
  2. 发送消息没问题
  3. 服务器之间没有n / w辅助功能问题
  4. 在消息队列服务器安全属性
  5. 中启用未经过身份验证的RPC调用
  6. 队列格式正确。我正在使用直接操作系统格式。还尝试使用TCP格式指定IP地址而不是机器名称
  7. 但无济于事。有什么想法吗?

    由于

1 个答案:

答案 0 :(得分:0)

如果之前有效并且停止工作,那么问题几乎肯定是由于发送方或接收方的DTC发生变化,防火墙发生变化,或两者兼而有之。

根据this guidance,您可能需要:

  

...配置队列计算机和客户端计算机以启用   网络DTC访问。

  

...配置Windows防火墙以将MS DTC添加到例外列表中。

如果这从未奏效,那么它可能是其他几个问题之一,但正如所述here,远程读取“不是最佳消息传递模型的一部分”,即MSMQ采用的最佳范例是< em> send-remote,read-local 。考虑更改您的架构而不是使用远程读取。