Usando filas de difusão seletiva no System.Messaging e MSMQ 3.0

Estou tentando usar o MessageQueues para notificar os usuários sobre um aplicativo de alterações de dados usando o recurso Multicast, mas não o faz funcionar: a estação de trabalho que envia a mensagem a recebe, mas nenhuma das outras estações de trabalho em execução parece capturar a mensagem enviada.

O envio de mensagens é feito da seguinte maneira:

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

E recebê-los:

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

Então, obviamente, estou perdendo alguma coisa, e não consigo encontrar bons recursos no multicast com o MSMQ 3.0 no .NE

Além disso, o que não está claro é se devo usar uma fila local por estação de trabalho ou uma única fila remota em um servidor para multicast de mensagens? E o uso do método de recebimento em mensagens multicast as remove da fila?

Qualquer ajuda, dicas, dicas, sugestões, qualquer coisa ... será muito bem-vind

or outro lado, todas as estações de trabalho estão na mesma sub-rede e todas têm o MSMQ 3.0 instalad

A palavra final

Bem, obrigadocomputador portáti para sua ajuda. O problema estava realmente relacionado a permissões, como descobri ao testar sua solução com objetos COM:

pesar do que a caixa de diálogo Propriedades da fila dipermissions NÃO são totalmente ignorados em filas não autenticadas, pelo menos ao usar multicasting. Se você deseja que sua fila receba mensagens multicast, ela deve conceder a 'ANONYMOUS_LOGON' o direito de 'Enviar mensagens'. Caso contrário, as mensagens multicast serão descartadas sem aviso prévio nos logs de eventos ou qualquer outra coisa (a menos que eu tenha perdido alguma coisa

Nas estações Win7 (as estações XP parecem estar bem, o que me indicou o problema real), as filas criadas através do código não têm essas permissões e, portanto, devem ser definidas manualmente após a criação da fila:

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

arece que internamente, o MSMQ usa essa conta para gravar mensagens multicast em filas não autenticada

questionAnswers(1)

yourAnswerToTheQuestion