Использование многоадресных очередей в System.Messaging и MSMQ 3.0

Я пытаюсь использовать 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

Итак, мне явно чего-то не хватает, и я не могу найти никаких хороших ресурсов по многоадресной рассылке с MSMQ 3.0 в .NET.

Также неясно, следует ли мне использовать локальную очередь для каждой рабочей станции или одну удаленную очередь на сервере для многоадресной рассылки сообщений? И удаляет ли их из очереди использование метода приема для многоадресных сообщений?

Любая помощь, подсказки, подсказки, предложения, что угодно ... будут очень приветствоваться.

Кстати, все рабочие станции находятся в одной подсети, и на всех установлен MSMQ 3.0.

Последнее слово

Спасибо, ноутбук за вашу помощь. Проблема была фактически связана с разрешениями, как я обнаружил при тестировании вашего решения с COM-объектами:

Несмотря на то, что говорится в диалоговом окне свойств очереди, разрешения НЕ полностью игнорируются для неаутентифицированных очередей, по крайней мере, при использовании многоадресной рассылки . Если вы хотите, чтобы ваша очередь принимала многоадресные сообщения, она должна предоставить «ANONYMOUS_LOGON» право «отправлять сообщения».В противном случае многоадресные сообщения просто отбрасываются без какого-либо уведомления в журналах событий или что-то еще (если я что-то не пропустил).

На станциях Win7 (кажется, что станции XP работают нормально, что и указывало мне на настоящую проблему) очереди, созданные с помощью кода, не имеют таких разрешений и, следовательно, должны быть установлены вручную после создания очереди:

Dim msgQ = Messaging.MessageQueue.Create(queueName)
msgQ.SetPermissions("ANONYMOUS LOGON",
                    Messaging.MessageQueueAccessRights.WriteMessage)

Это Казалось бы, внутри MSMQ использует эту учетную запись для записи многоадресных сообщений в неаутентифицированные очереди.

7
задан ROMANIA_engineer 16 October 2017 в 20:21
поделиться