首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在System.Messaging和MSMQ3.0中使用多播队列

问在System.Messaging和MSMQ3.0中使用多播队列
EN

Stack Overflow用户
提问于 2011-12-21 10:30:38
回答 1查看 3.8K关注 0票数 7

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

发送消息的步骤如下:

代码语言:javascript
复制
Dim sendQueue As New Messaging.MessageQueue("FormatName:MULTICAST=234.1.1.1:8001")
Dim message As New Messaging.Message("message body...")
sendQueue.Send(message)

并接收它们:

代码语言:javascript
复制
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中使用MSMQ3.0似乎找不到任何好的多播资源。

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

任何帮助,暗示,提示,建议,任何.将受到极大的欢迎。

另外,所有工作站都位于同一个子网上,并且都安装了MSMQ3.0。

最后一个词

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

尽管队列属性对话框显示了什么,但在未经身份验证的队列上,权限不会被完全忽略,至少在使用多播时是如此。如果您希望队列接收多播消息,则必须授予“ANONYMOUS_LOGON”“发送消息”的权限。否则,多播消息就会被丢弃,而不会在事件日志或其他任何情况下发出任何通知(除非我遗漏了什么)。

在Win7站点(XP站点似乎做得很好,这就是我要指出的实际问题),通过代码创建的队列没有这样的权限,因此必须在创建队列之后手动设置:

代码语言:javascript
复制
Dim msgQ = Messaging.MessageQueue.Create(queueName)
msgQ.SetPermissions("ANONYMOUS LOGON",
                    Messaging.MessageQueueAccessRights.WriteMessage)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-21 13:55:45

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

代码语言:javascript
复制
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

最后一句话更新我很高兴你现在松了口气。对于其他计算机中的问题,防止拒绝服务攻击是一种安全增强。默认msmq队列权限在MSMQ4.0中更改

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8588377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档