Sí, se necesitan MSMQ instalado localmente para escribir en una cola remota. Si está escribiendo en una cola privada, eche un vistazo al this page que tiene información útil sobre cómo formatear el nombre de la cola. Si va a escribir a una cola transaccional remota, entonces usted necesita para asegurarse de que especifica que correctamente (punto 5)
1. Cuando se trabaja con las colas remotas, la nombre de la cola en el formato machinename\private$\queuename
no funciona. Esto produce un error de "ruta de cola no válida" de .
2. El nombre de la cola debe mencionarse como FormatName:Direct=OS:machinename\\private$\\queuename
.
Esto es necesario ya que el acceso a la cola se realiza internamente utilizando el formato sintaxis de nombre solamente. La otra representación amigable se convierte a FormatName y luego se usa. Al trabajar con colas remotas, a menos que haya un AD para resolver el nombre de la cola, el nombre descriptivo no funcionará en . Consulte la documentación para más detalles.
Por ej.
MessageQueue rmQ = new MessageQueue
("FormatName:Direct=OS:machinename\\private$\\queue");
rmQ.Send("sent to regular queue - Atul");
3. Además del punto anterior, tenga en cuenta que FormatName distingue entre mayúsculas y minúsculas. Si menciona la cadena anterior como FORMATNAME:Direct=OS:machinename\\private$\\queuename
, no funcionará . Sorprendentemente, no hay error lanzado en este caso. "FormatName" parte de la cadena parece ser la única parte sensible a mayúsculas de . Otros pueden aparecer en diferentes casos. Por ej. Puede escribir "DIRECTO".
4. En caso de que desee utilizar la dirección IP de la máquina, la sintaxis será FormatName:Direct=TCP:ipaddress\\private$\\queuename
.
Por ej.
MessageQueue rmQ = new MessageQueue
("FormatName:Direct=TCP:121.0.0.1\\private$\\queue");
rmQ.Send("sent to regular queue - Atul");
5. Las propiedades transaccionales de la instancia de cola se crea en el código debe coincidir con el de la cola que está intentando enviar el mensaje a . Entonces, en los ejemplos anteriores, estaba enviando un mensaje a una cola no transaccional . Para enviar a una cola transaccional, el código habría
MessageQueue rmTxnQ = new MessageQueue
("FormatName:Direct=OS:machinename\\private$\\queue");
rmTxnQ.Send("sent to Txn queue - Atul", MessageQueueTransactionType.Single);
Si las propiedades transaccionales no coinciden, el mensaje no será entregado . La parte sorprendente es, de nuevo, no he recibido ningún error, y el mensaje simplemente desapareció
6. Finalmente, cuando envía mensajes a la cola remota, se crea una cola de salida temporal en su propia máquina. Esto se usa en el caso la cola remota no está disponible. Si va a la consola de administración de la computadora (compmgmt.msc) y expanda los Servicios y aplicaciones/ Cola de mensajes/Colas salientes, verá estas colas. El lado derecho de la consola debe mostrar los detalles, incluido el estado (conectado o no) y las direcciones IP para el próximo salto (s).
sí, eso es lo que pensé . Solo quería escucharlo de otra persona. Estoy usando colas privadas (ya he hecho la parte del formato). ¡UN PUNTO PARA GRYFFINDOR! –
Después de realizar cambios según la configuración anterior (derechos y instalación de MSMQ): queue.send(): funciona bien. Pero oue queue.receive() o queue.getMessageEnumerator2() no funciona. ¿¿Me puede ayudar?? Estoy probando esto en mi máquina local (componentes instalados de MSMQ). – watraplion
@watraplion debe hacer una nueva pregunta. – stuartd