【问题标题】:Why does MSMQ think I'm on a workgroup computer?为什么 MSMQ 认为我在工作组计算机上?
【发布时间】:2011-08-22 12:59:21
【问题描述】:

我的电脑连接到一个域,但是当我去创建一个公共队列时:

MessageQueue.Create(@".\testqueue");

我收到此错误:

工作组安装计算机可以 不支持操作。

为什么 MSMQ 会认为我在工作组计算机上?

【问题讨论】:

    标签: dns msmq workgroup


    【解决方案1】:

    我知道这已经晚了,并且已经有一个可以接受的答案,但我刚刚遇到了这个问题,并通过更改队列字符串的格式来解决。

    当我的队列名称是这样时,我得到了工作组错误:

    ".\QueueName"
    

    当我将其更改为更正式的版本时,没有错误并且发送到队列有效:

    "FormatName:DIRECT=OS:ComputerName\private$\QueueName"
    

    以防万一其他人看到这篇文章,现在他们有其他尝试...

    【讨论】:

    • ".\QueueName" 指向一个公共队列。将消息发送到公共队列会引发上述错误。但是将消息发送到私有队列不会。您的正式版本实际上指向一个私有队列。这就是他们工作的原因。
    【解决方案2】:

    我也遇到了同样的问题,改成@".\private$\QueueName"解决了

    【讨论】:

      【解决方案3】:

      成为域的一部分是在 AD 集成模式下安装 MSMQ 的先决条件。 它不保证 MSMQ 以 AD 集成模式安装。 如果满足以下条件,MSMQ 将以工作组模式安装:

      1. 没有选择 AD 集成作为设置选项
      2. 选择了 AD 集成,但未能初始化;检查事件日志

      是的,工作组名称在域成员情况下令人困惑。

      【讨论】:

      • 我检查了日志,发现 MSMQ 检测到以前的 MSMQ 配置与它与 AD 一起使用时存在冲突。我安装了 MSMQ,后来启用了 AD 集成。我完全卸载了 MSMQ,然后重新安装了所有内容(包括 AD 集成),我不再收到错误消息。感谢您的帮助。
      • 您的评论描述了对我有用的答案:我不仅必须添加额外的 MSMQ 组件,而且必须首先完全卸载 MSMQ 才能使其正常工作.
      • 有人可以详细说明在哪里可以找到“事件日志”(我试图在 eventvwr.msc 中找到有关 MSMQ 的内容,但 Microsoft/Windows/MSMQ/End2End 为空)以及如何“删除 AD 中的 MSMQ 对象?
      • 删除过时的 MSMQ Active Directory 对象blogs.msdn.microsoft.com/johnbreakwell/2009/12/16/…
      • 类似于@MikePateras,我没有安装“MSMQ Active Directory 域服务集成”,但我不必卸载 MSMQ。我只需要安装 AD 集成并重新启动消息队列服务和尝试访问队列的应用程序。 (想必最好停止 MSMQ 服务,安装 AD 集成,然后启动服务。)
      【解决方案4】:

      我遇到了同样的问题,看看下面的解决方案。我不知道原因,但以这种方式创建队列效果很好。

      private MessageQueue messageQueue;
      public const string DEFAULT_QUEUE_NAME = "newQueue";
      public const string QUEUENAME_PREFIX = ".\\Private$\\";
      
      public static string QueueName
      {
          get
          {
              string result = string.Format("{0}{1}", QUEUENAME_PREFIX, DEFAULT_QUEUE_NAME);
              return result;
          }
      }
      
      public void SendMessage()
      {
          string queuePath = QueueName;
          MessageQueue  messageQueue = MessageQueue.Create(queuePath);
          messageQueue.Send("msg");            
      }
      

      你可以用同样的方式创建队列来接收消息。

      【讨论】:

        【解决方案5】:

        添加用于文档目的...我在尝试访问事务性死信队列时收到错误“工作组安装计算机不支持该操作”,这是由于未指定机器名称。我使用句点来表示计算机名称。例如“FORMATNAME:DIRECT=OS:.\SYSTEM$;DEADXACT”。即使使用完整的格式名称,它也不起作用。用计算机名称替换句点后问题解决。下面是工作代码。

        using (var queue = new MessageQueue($@"FORMATNAME:DIRECT=OS:{Environment.MachineName}\SYSTEM$;DEADXACT"))
        {
            queue.Purge();
        }
        

        【讨论】:

          【解决方案6】:

          MSMQ 可能作为来宾用户或其他用户安装在您的计算机上,因此请将其从计算机上删除并以管理权限安装。

          【讨论】:

            【解决方案7】:

            在服务器上,我在运行 MSMQ 时遇到了问题并出现了不同类型的错误,包括问题中提出的错误。

            工作组安装电脑不支持该操作

            对我有用的不是摆弄服务器管理器,而是使用 Powershell 重新安装 MSMQ。

            删除-WindowsFeature Msmq; Add-WindowsFeature MsMq

            这两个 cmdlet 可以在以管理员身份运行的 Powershell 控制台中运行。至少它为我修复了错误,但这将安装整个 Msmq 功能,包括子功能。

            【讨论】:

              【解决方案8】:

              我在从 Visual Studio (2015) 调试网站时遇到此错误。 重启 iisexpress 解决了这个问题...

              【讨论】:

                猜你喜欢
                • 2021-07-30
                • 2019-08-08
                • 2011-07-07
                • 1970-01-01
                • 1970-01-01
                • 2023-03-04
                • 1970-01-01
                • 1970-01-01
                • 2018-03-01
                相关资源
                最近更新 更多