2011-08-08 64 views
8

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.

  1. Windows 7 Home Premium x64
  2. 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:

  1. Reading Messages from Remote Queues
  2. Understanding how MSMQ security blocks RPC traffic
  3. Getting MSMQ messages out of Windows Server 2008 remotely
  4. Clear the way - MSMQ coming through
  5. 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?

Respuesta

6

OK ... Obviamente no leí todo lo que necesitaba leer.La respuesta estaba en:

MSMQ 4.0 - what's new in Computer Management?

que tenía que añadir una nueva clave de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC 

y establecer el valor a 1.

Una vez que hice esto en el servidor W7, entonces podría leer la cola de la máquina XP.

¿Soy el único que piensa que es extraño que alguien pueda escribir en la cola, pero tuve que configurar esto para leer desde la cola? Eso es tan extraño.

+3

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. –

+1

@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 ;-) –

+0

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. –

Cuestiones relacionadas