2011-11-21 10 views
6

Tengo un problema al cambiar la prioridad de un mensaje que se envía a un MSMQ definido. Cada vez que establecer la prioridad del mensaje que nunca parece afectar a la prioridad del mensaje dentro de la cola Aquí es una snipet de lo que estoy haciendo:¿Cómo puedo cambiar la prioridad de un mensaje en MSMQ?

static public void QueueBatchItem(MessageQueue mq, MessageQueueTransaction msgTx, MessagePriority msgPriority) 
{ 
    using (System.Messaging.Message mm = new System.Messaging.Message()) 
    { 
     string messageLabel = Guid.NewGuid().ToString(); 
     System.Messaging.XmlMessageFormatter formatter = new XmlMessageFormatter(); 

     RunSimulationRequestDTO dto = new RunSimulationRequestDTO(); 
     dto.RetryCount = 0; 
     dto.BatchHeaderID = batchID; 
     dto.MSMQLabel = messageLabel; 

     mq.MessageReadPropertyFilter.Priority = true; 
     mm.Priority = msgPriority; 

     mm.Body = dto; 
     mm.Label = messageLabel; 
     mm.Formatter = formatter; 
     mq.Send(mm, msgTx); 

    } 
} 

Si puedo depurar a través del código de la prioridad por defecto es 'Normal 'y cuando se envía un artículo a la cola, la prioridad aparece como 0 con' Mensajes de cola '. Puedo pasar la prioridad como MessagePriority.High o cualquiera de los 8 valores posibles y nunca cambia cuál es la prioridad.

¿Qué me falta en este ... los pocos ejemplos que yo he visto que todas las cosas que se muestran tiene básico como

Message mm = new Message(); 
mm.Priority = MessagePriority.High; 

incluso he intentado casi pequeñas aplicaciones de prueba fuera de mi código principal con los ejemplos de MSDN y el número de prioridad nunca cambian.

gracias.

edición: que se aseguró que la prioridad que estaba viendo no venía de la rosca estableciéndolo en AboveNormal

<ThreadManagersConfiguration DefaultSleepBetweenPolls="5000" DefaultMsmqServer="."> 
    <ThreadManagers> 
     <add DisplayName="BatchSimulationManager" 
      RequestMSMQ=".\Private$\BatchSimulationRequest" 
      ResponseMSMQ="" 
      FailedMSMQ=".\Private$\BatchSimulationFailure" 
      Priority="AboveNormal" 
      TransactionalMode="RollbackTransaction" 
      MaxThreads="16" 
      SleepTimeBetweenPolling="10000" 
      ProcessModel="BATCH"/> 
    </ThreadManagers> 
    </ThreadManagersConfiguration> 

queue

+0

¿Es esta una cola privada para su aplicación? – iandotkelly

+0

Sí, es una cola privada. –

+0

Definitivamente está mirando la prioridad del mensaje y no la prioridad de la cola, que tiene un valor predeterminado de 0 – iandotkelly

Respuesta

Cuestiones relacionadas