Ok mi problema es similar al How to receive message from a private workgroup queue (y básicamente estoy usando el mismo código).MSMQ Problema al leer colas privadas remotas (nuevamente)
estoy creando la cola en la máquina host mediante
MessageQueue.Create(@".\Private$\MyNewPrivateQueue");
La apertura de la cola en la máquina remota con
var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue");
Y la escritura/lectura de datos utilizando queue.send() y cola. Recibir()
Tengo dos sistemas con los que estoy experimentando.
- Windows 7 Home Premium x64
- Windows XP SP3
Cuando creo la cola privada en el sistema W7 y trato de escribir a continuación, lea la cola del sistema XP (según la referencia pregunta) falla con una excepción de "Message Queue Service is not available" en la acción de lectura.
Sin embargo, cuando invierto los sistemas (crea la cola en el sistema XP y escribe/lee desde el sistema W7 y usa el mismo código) funciona como se esperaba.
he trabajado a través de:
- Reading Messages from Remote Queues
- Understanding how MSMQ security blocks RPC traffic
- Getting MSMQ messages out of Windows Server 2008 remotely
- Clear the way - MSMQ coming through
- MSMQ 3.0 too secure for you?
también he intentado apaga los cortafuegos W7 y XP, y le da a todos los hombres y a su perro los permisos completos en las colas ellos mismos en vano.
Dado que funciona con XP como el servidor de cola pero no con W7 como el host, supongo que es un problema de seguridad y no de código. Pero por mi vida no puedo ver dónde está el bloqueo en W7.
EDITAR 8/9
OK .. añadiendo
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC
me permitió leer mensajes de la cola privada remota. Sin embargo, esto no parece permitir el uso de
GetPrivateQueueByMachine(String machineName)
para enumerar las colas privadas disponibles. ¿Alguna idea para esta?
No, no es extraño. Enviar y recibir desde una cola utiliza protocolos de red completamente diferentes. El (los) protocolo (s) MSMQ (y HTTP) son para enviar/presionar mensajes; el protocolo RPC es para recibir/extraer mensajes. Estos protocolos son realmente tiza y queso con puntos de problemas completamente diferentes. –
@John ... Bien, dado el uso de 2 protocolos diferentes, puedo ver que significa diferentes comportamientos de lectura/escritura, por lo que no es tan extraño como me imaginaba. Por otro lado ... dos protocolos totalmente diferentes ;-) –
Sí :-) MSMQ se diseñó a mediados de la década de 1990 como una tecnología de inserción para las LAN de Corproate, antes de que existiera Internet. RPC ya estaba disponible, por lo que no es necesario reinventar la rueda. Si MSMQ fue diseñado en los últimos 5-10 años, sería muy diferente. –