gpt4 book ai didi

.net - 在 System.Messaging 和 MSMQ 3.0 中使用多播队列

转载 作者:行者123 更新时间:2023-12-04 12:49:12 25 4
gpt4 key购买 nike

我正在尝试使用 MessageQueues 使用多播功能通知用户数据更改的应用程序,但无法使其工作:发送消息的工作站确实收到了它,但其他正在运行的工作站似乎都没有捕捉到发送的消息。

发送消息如下:

Dim sendQueue As New Messaging.MessageQueue("FormatName:MULTICAST=234.1.1.1:8001")
Dim message As New Messaging.Message("message body...")
sendQueue.Send(message)

并接收它们:
Dim receiveQueue As New Messaging.MessageQueue(".\private$\myQ")
receiveQueue.MulticastAddress = "234.1.1.1:8001"
receiveQueue.BeginReceive()

AddHandler receiveQueue.ReceiveCompleted, Sub(sender As Object, e As Messaging.ReceiveCompletedEventArgs)
' ... handle message
receiveQueue.BeginReceive()
End Sub

所以我显然遗漏了一些东西,而且我似乎找不到任何关于在 .NET 中使用 MSMQ 3.0 进行多播的好资源。

另外,不清楚的是我是否应该为每个工作站使用一个本地队列,还是应该在服务器上使用一个远程队列来多播消息?对多播消息使用接收方法是否将它们从队列中清除?

任何帮助、提示、技巧、建议、任何东西......都将受到极大欢迎。

顺便提一下,所有工作站都在同一个子网上,并且都安装了 MSMQ 3.0。

最后一句话

好的谢谢 笔记本电脑您的帮助。这个问题实际上与我在使用 COM 对象测试您的解决方案时发现的权限有关:

尽管队列属性对话框说了什么, 未经身份验证的队列不会完全忽略权限,至少在使用多播时 .如果您希望您的队列接收多播消息,它必须授予“ANONYMOUS_LOGON”“发送消息”的权利。否则,多播消息会被丢弃,而不会在事件日志或其他任何地方发出任何通知(除非我错过了一些东西)。

在 Win7 站上(XP 站似乎做得很好,这就是我指出的实际问题),通过代码创建的队列没有这样的权限,因此必须在创建队列后手动设置:
Dim msgQ = Messaging.MessageQueue.Create(queueName)
msgQ.SetPermissions("ANONYMOUS LOGON",
Messaging.MessageQueueAccessRights.WriteMessage)

似乎在内部,MSMQ 使用该帐户将多播消息写入未经身份验证的队列。

最佳答案

您能否创建 MSMQDestination 类并为其分配多播格式,设置消息标签并使用 MSMQMessage 类执行发送任务

Dim dest As New MSMQDestination
dest.FormatName = "MULTICAST=234.1.1.1:8001"

Dim message As MSMQMessage
message.label ="Test Message"
message.Send DestinationQueue:=dest

最终字更新
我很高兴你现在松了一口气。对于您在其他机器上的问题,它是一种安全增强功能,可防止拒绝服务攻击。
default msmq queue permission changed in msmq 4.0

关于.net - 在 System.Messaging 和 MSMQ 3.0 中使用多播队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588377/

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