У меня проблема с изменением приоритета сообщения, отправляемого в определил 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);
}
}
Если я отлаживаю через code, приоритет по умолчанию - «Нормальный», а когда элемент отправляется в очередь, приоритет отображается как 0 с «Сообщения очереди». Я могу передать приоритет как MessagePriority.High или любое из 8 возможных значений, и это никогда не меняет приоритет.
Чего мне не хватает в этом ... несколько примеров, которые я видел, показали, что все имеет базовое значение, так как
Message mm = new Message();
mm.Priority = MessagePriority.High;
Я даже пробовал небольшие тестовые приложения вне моего основного кода с примерами MSDN и номер приоритета никогда не меняется.
спасибо.
edit: Я убедился, что приоритет, который я видел, не исходил от потока, установив его на 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>