【问题标题】:WCF / MSMQ / Permissions / Windows 10 & VS2019WCF / MSMQ / 权限 / Windows 10 & VS2019
【发布时间】:2020-12-31 16:38:27
【问题描述】:

我正在使用一个使用 WCF 和 MSMQ 的旧版 c# 控制台应用程序。它已经有好几年了,是在 Windows 7 中运行的 VS2015 下开发的。它在那个环境中运行良好。

但是,当我简单地将项目复制到运行 VS2019 的 Windows 10 机器并在 VS2019 调试器中运行应用程序时,当它尝试对 WCF/MSMQ 消息进行排队时,会出现以下异常...

打开队列时出错:队列不存在或您没有足够的权限执行该操作。 (-1072824317, 0xc00e0003)。无法从队列发送或接收消息。确保 MSMQ 已安装并正在运行。还要确保可以使用所需的访问模式和授权打开队列。

队列确实存在。事实上,如果它不存在,应用程序实际上会创建它 - 它在第一次运行时就这样做了。

在消息队列下,关联队列已授予我的用户帐户的完全访问权限。

MSMQ 已安装。同样,应用程序本身创建了一个队列。

我正在“以管理员身份”运行 VS2019(因此正在调试的应用程序) - 这是另一个痛苦...

同样,这在较旧的 Windows 7 / VS2015 环境中运行良好。仅当项目复制到 Windows 10 / VS2019 环境时。显然在新环境中有一些设定……

有什么想法吗?

非常感谢!
-- 简陋

【问题讨论】:

  • 如果你以管理员身份运行 Visual Studio 会怎样?
  • >> 如果您以管理员身份运行 Visual Studio 会怎样?上面说了,我是。必须这样做才能通过其他一些 Win32 API 调用。我得说......对于开发人员来说,这个环境被锁定得太多了......
  • 现在您知道为什么每个人都使用 ServiceBus。不是永久解决方案,但如果您(预先创建)队列..当您尝试向其发送消息时会发生什么?

标签: c# wcf


【解决方案1】:

这可能是由于配置文件中的基地址有问题。服务器名称需要包含在基地址中。如果win7的服务器名和win10的服务器名不同,可能会导致这个问题。这个blog也有类似的问题,可以参考一下。

有关“消息队列到 Windows Communication Foundation”的更多信息,您可以参考此链接:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/message-queuing-to-wcf

【讨论】:

  • 此应用不引用任何服务器名称。队列名称是相对引用的,例如“.\private$\messageswitch”。我不认为这是一个发展问题。该应用程序已有 10 多年的历史,并安装在多个州的多个服务器配置上。事实上,如果我运行“发布”构建版本(它作为服务安装)它运行良好 - 完全相同的配置。仅在 VS2019 环境下失败。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 2011-10-17
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2018-11-16
相关资源
最近更新 更多