2012-03-09 25 views
6

Necesito poder editar mensajes en mi cola de errores (para que puedan ser reenviados a la cola real para su reprocesamiento).Editar mensajes de MSMQ en una cola

Me gustaría hacer mi propia herramienta personalizada para hacer esto (porque mis mensajes requieren un formato específico para que el personal de soporte pueda leerlos fácilmente).

Sé que esto es posible porque la aplicación "QueueExplorer" hace esto.

¿Alguien sabe cómo puedo cargar un mensaje MSMQ (que no es el primero en la cola), editarlo y guardarlo nuevamente en la cola?

+0

Como nota al margen: normalmente solo compraría QueueExplorer, pero no permite que mis mensajes sean formateados de manera que puedan usarlos mis usuarios. También necesito integrar la función de devolver el mensaje a la cola original. Y, por último, QueueExplorer es terriblemente lento para tareas muy simples. – Vaccano

+1

Esto probablemente no sea muy popular, pero si QueueExplorer está escrito en .NET (que parece que es) ¿por qué no simplemente ejecutarlo a través de un descompilador para ver cómo lo hacen? –

+0

@Vaccano QueueExplorer dice * Cuando carga, copia, arrastra y suelta o edita un mensaje, irá al final de la cola. * (Vea http://www.cogin.com/mq/qelimitations.php) así que básicamente cargan el mensaje y después de la edición, eliminan el original y ponen en cola los mensajes editados. No hacen "edición in situ" si eso es lo que buscas ... – Yahia

Respuesta

3

Iterar a través de los mensajes, el uso de algo como esto:

List<Message> msgList = new List<Message>(); 

using (MessageEnumerator me = queue.GetMessageEnumerator2()) 
{ 
    while (me.MoveNext(new TimeSpan(0, 0, 0))) 
    { 
    Message message = me.Current; 
    msgList.Add(message) 
    } 
} 

entonces Se puede recorrer la lista, el procesamiento de cada mensaje. Crea un nuevo mensaje, basado en el original. A continuación, elimine el mensaje existente y agregue el nuevo.

foreach (Message message in msgList) 
{ 
    //Create a new message as required, add it, then remove the old message 
    MessageQueue.ReceiveById(message.MessageId); 
} 
3

Se supone que los mensajes de MSMQ son inmutables. Lo mejor que puede hacer es leer el mensaje y enviar una copia editada del mensaje a la cola.

Cuestiones relacionadas