我的团队正在第一次尝试使用NServiceBus (v2.0),使用MSMQ作为后备存储。我们被队列权限卡住了。
我们在一个Web窗体应用程序中使用它,在该应用程序中运行网站的用户帐户不是计算机上的管理员。
当NServiceBus创建MSMQ队列时,它将授予本地administrators组完全控制权限,以及授予本地everyone和匿名组发送邮件的权限。
但是后来,作为初始化队列的一部分,NServiceBus尝试读取它的所有消息。这就是我们遇到权限错误的地方。由于该网站未以管理员身份运行,因此不允许其读取邮件。
其他人是如何处理这件事的?您的应用程序是否以管理员身份运行?还是先在代码中创建MSMQ队列,给它所需的权限,这样NServiceBus就不必创建它了?或者是我们遗漏了一些配置?或者,我们编写的代码错误地使用了NServiceBus,很可能会遇到这种情况?
发布于 2010-05-25 09:18:56
我们在Installer子类中创建队列,并将其作为msi安装的一部分执行。队列的所有权是一个快捷方式,但可以通过AccessControlList设置相关权限:
MessageQueue queue = MessageQueue.Create(queueName, true);
AccessControlList permissions = new AccessControlList();
permissions.Add(new MessageQueueAccessControlEntry(
new Trustee(this.serviceProcessInstaller.Username),
MessageQueueAccessRights.FullControl,
AccessControlEntryType.Set));
// Add additional permissions for admins & message-sending accounts
queue.SetPermissions(permissions);我觉得NServiceBus的队列自动创建功能更适合开发,而不是部署。
发布于 2010-05-21 22:34:21
这篇博文应该会有所帮助:
http://blogs.msdn.com/johnbreakwell/archive/2009/08/03/default-msmq-queue-permissions-have-changed-in-msmq-4-0.aspx
特别是:
如果要在创建队列时设置权限,则始终可以构建所需的安全描述符,并将其传递到MQCreateQueue的pSecurityDescriptor参数中。但是,您不能自定义默认值,因为它们是硬编码的。
干杯
约翰·布雷克韦尔( John Breakwell )
发布于 2010-05-21 18:33:37
更改队列的所有权,这是我在类似情况下唯一有效的方法
https://stackoverflow.com/questions/2881187
复制相似问题