Recomendaciones sobre la referencia a colas

Actualización: noviembre 2007

Si crea una instancia del componente MessageQueue, deberá indicar con qué cola desea que se comunique el componente. Hay tres formas de hacer referencia a una cola en el código:

  • Por ruta de acceso: la ruta de acceso a una cola identifica de forma única el equipo y el nombre de la cola en que se está interesado.

  • Por nombre de formato: identificador único para la cola que genera MSMQ cuando se crea la cola o cuando es generada posteriormente por la aplicación.

  • Por etiqueta: nombre descriptivo y potencialmente no único para la cola que asigna el administrador cuando se crea la cola.

Cuando cree una cola nueva, deberá utilizar la ruta de acceso en lugar de una instancia nueva del componente MessageQueue. El nombre de formato y la etiqueta los asigna el sistema de Message Queue Server después de crear la cola. No obstante, cuando haga referencia a una cola existente en el código o desde el Cuadro de herramientas, podrá elegir el método que desee utilizar para hacer referencias. Con independencia del método elegido, se almacenará en la propiedad Path del componente.

Utilizar la ruta de acceso para hacer referencia a una cola

Una ruta de acceso de la cola tiene el formato servername\queuename. Las rutas de acceso a una cola son siempre únicas. La tabla siguiente enumera la información sobre rutas de acceso que se utiliza para cada tipo de cola:

Tipo de cola

Sintaxis que se utiliza en la ruta de acceso

Cola pública

nombreDeEquipo\nombreDeCola

Cola privada

nombreDeEquipo\Private$\nombreDeCola

Cola del diario

nombreDeEquipo\nombreDeCola\Journal$

Cola del diario del equipo

nombreDeEquipo\Journal$

Cola de mensajes no entregados del equipo

nombreDeEquipo\Deadletter$

Cola de mensajes transaccionales no entregados del equipo

nombreDeEquipo\XactDeadletter$

Puede utilizar "." para el nombre del equipo local, de manera que "YourMachine\MyQueue" es equivalente a ".\MyQueue".

A continuación se incluyen algunas advertencias sobre el uso de una ruta de acceso para hacer referencia a las colas:

  • Cuando el controlador de dominio de un servidor de Message Queue Server recibe una operación para una cola a la que se hace referencia por ruta de acceso, debe resolver la ruta y determinar el nombre de formato de la cola en cuestión. Esto puede traducirse en un rendimiento algo menor que si se hace referencia a la cola por nombre de formato directamente.

  • Si está diseñando un componente que se va a utilizar como servicio Web XML, obtendrá los mejores resultados en cuanto a rendimiento si utiliza el método de nombre de formato para hacer referencia a las colas, en lugar del método de ruta de acceso.

  • No se puede hacer referencia a una cola por ruta de acceso si se desea enviar mensajes cuando está desconectada. Los mensajes desconectados deben enviarse utilizando el nombre de formato.

Para recuperar la ruta de acceso a una cola, puede consultar y combinar los resultados devueltos por dos propiedades independientes de la clase base MessageQueue: la propiedad MachineName y la propiedad QueueName.

En el código, la referencia a una cola por ruta de acceso tiene el siguiente aspecto:

MessageQueue1.Path = "YourMachine\MyQueue"
     MessageQueue1.Path = @"YourMachine\MyQueue";
Nota:

La sintaxis @".\MyQueue" para C# es equivalente a utilizar ".\\MyQueue". El signo @ indica una cadena literal. Para obtener más información, vea string (Referencia de C#).

Utilizar el nombre de formato para hacer referencia a una cola

Los nombres de formato adoptan la forma de una cadena que indica si una cola es pública o privada, seguida de un identificador GUID generado para la cola y los identificadores que sean necesarios. La tabla siguiente enumera la información sobre rutas de acceso que se utiliza para cada tipo de cola:

Tipo de cola

Sintaxis que se utiliza en el nombre de formato

Cola pública

FORMATNAME:PUBLIC=GUIDdeCola

Cola privada

FORMATNAME:PRIVATE=GUIDdeEquipo\númeroDeCola

Cola del diario

FORMATNAME:PUBLIC=GUIDdeCola;JOURNAL   

O bien

FORMATNAME:PRIVATE=GUIDdeEquipo\NúmeroDeCola;JOURNAL

No se asigna un nombre de formato a una cola; el administrador de colas es quien genera este valor cuando se crea la cola. La referencia a una cola por su nombre de formato es el medio más directo para tener acceso a una cola, dado que el controlador de dominio del servidor no tiene que interpretar la referencia como sucede cuando la referencia a la cola se hace por ruta de acceso.

A continuación se ofrecen algunas sugerencias sobre cómo se hace referencia a las colas por nombre de formato:

  • Si desea enviar mensajes a una cola sin conexión, deberá hacer referencia a la cola por nombre de formato en lugar de hacerlo por ruta de acceso, porque la ruta de acceso no estará disponible para ser resuelta si la cola no tiene conexión.

  • Tenga en cuenta que los nombres de formato pueden dejar de ser válidos si se cambia la topología de la red o si se elimina y vuelve a crear una cola.

Para recuperar el nombre de formato de una cola puede consultar la propiedad FormatName de la clase MessageQueue.

En el código, la referencia a una cola por nombre de formato tiene el siguiente aspecto:

MessageQueue1.Path = _
   "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"
     MessageQueue1.Path =
           "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75";

Utilizar etiquetas para hacer referencia a colas

También puede hacer referencia a una cola por su etiqueta, que es un texto descriptivo que el administrador asigna a la cola. Las etiquetas no siempre son únicas, por lo que se producirá un error si existe un conflicto de nombres al intentar conectarse a una cola específica por medio de la etiqueta.

Las etiquetas pueden ser útiles en una situación donde se sepa que se va a trasladar una cola de un equipo a otro. Si hace referencia a la cola sólo por la etiqueta, todas las operaciones continuarán funcionando correctamente después del traslado de la cola a su nueva ubicación, siempre que no haya otras colas con esta etiqueta en el equipo nuevo. Si las hay, el método Send producirá un error.

Para recuperar la etiqueta de una cola puede consultar la propiedad Label de la clase MessageQueue.

En el código, la referencia a una cola por nombre de etiqueta tiene el siguiente aspecto:

MessageQueue1.Path = "LABEL:MyQueue"
     MessageQueue1.Path = "LABEL:MyQueue";

Vea también

Tareas

Cómo: Crear colas

Cómo: Crear instancias de componentes MessageQueue

Otros recursos

Crear, eliminar y administrar colas