gpt4 book ai didi

.net - 使用 .NET 以编程方式创建 MSMQ

转载 作者:行者123 更新时间:2023-12-04 06:35:19 32 4
gpt4 key购买 nike

在 Win 2008 R2 机器上运行。

作为自动化我的应用程序安装过程的一部分,我创建了一个小型命令行实用程序,当调用它时会创建一个 MQ。由于我的部署是在工作组环境中,我正在设置创建的队列权限,以便每个人和匿名用户都可以完全控制队列。

我的代码是这个

Try
Dim Q As MessageQueue = MessageQueue.Create(QueueName)
Console.WriteLine("Queue created successfully")

' Create an AccessControlList.
Dim list As New AccessControlList()

'Add the AccessControlEntry to the AccessControlList.
list.Add(New AccessControlEntry(New Trustee("Everyone"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))
'Add the AccessControlEntry to the AccessControlList.
list.Add(New AccessControlEntry(New Trustee("ANONYMOUS LOGON"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))

' Apply the AccessControlList to the queue.
Q.SetPermissions(list)

Catch ex As Exception
Console.WriteLine(String.Format("Unable to create queue {1}. {0}", ex, QueueName))

End Try

当我使用“.\Private$\QueueName”之类的队列名称运行它时,队列创建成功,如果我查看队列权限,一切似乎都正常(每个人和匿名都可以完全访问队列)。问题是权限看起来不错,但事实并非如此。当匿名用户尝试向队列发送(或读取)消息时,他会收到拒绝访问错误。如果在队列权限上我删除了所有人和匿名权限并重新创建它们,那么突然一切都按预期工作并且客户端可以发送消息。

进一步证明存在一些问题:如果我查看文件夹 c:\Windows\Sysnative\msmq\storage\lqs\上的队列设置文件的内容,我会看到这些权限

Security=010007806800000084000000000000001400000002005400030000000000140024001f100101000000000001000000000000140004001f10010100000000000507000000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000

在删除并重新创建权限后,我得到了这些安全设置:

Security=01000780680000008400000000000000140000000200540003000000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f4010000000014003f000f00010100000000000507000000000014003f000f0001010000000000010000000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000

在使用上述代码创建的每个队列上,安全设置就像我重新创 build 置之前的第一个安全行,之后的第二个安全行。

我在这里想念什么?

P.S 您可以阅读我在该主题上发表的 MS 论坛帖子中一位前 MSFT 员工对该安全 token 所做的一些分析
http://social.msdn.microsoft.com/Forums/en-US/msmq/thread/2f87fe8a-c452-432a-815d-05eeaf455514/

最佳答案

你看过 System.Messaging.MessageQueueInstaller 类吗?它由 installutil 调用。基本上,您在其上设置一堆属性(队列名称、权限、如果它是事务性的、启用日志等),然后让它完成所有工作。由于它已经建成,您可以尝试这条路线。

关于.net - 使用 .NET 以编程方式创建 MSMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851801/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com