Есть ли такая вещь, как MessageQueueWatcher в .NET? - PullRequest
1 голос
/ 21 августа 2009

В настоящее время я использую System.IO.FileSystemWatcher как часть системы «накатить свою собственную» очередь сообщений (передача «сообщений» XML между серверами с использованием веб-служб SOAP, запись «сообщений» в определенную папку на диске, Служба Windows, на которой работает FileSystemWatcher, набирает новые «сообщения» по мере их поступления и делает с ними что-то продуктивное). Я написал это еще во времена .NET 1.0 или 1.1 (я забыл, какой) в качестве альтернативы использованию COM-взаимодействия к тому, что было тогда в MSMQ SDK. Учитывая все это в качестве фона, я подумываю о замене этой специальной схемы очереди сообщений на «истинную» реализацию очереди сообщений. Проблема в том, что MSMQ не эквивалентен FileSystemWatcher для автоматического выбора новых сообщений из очереди по мере их поступления. Он похоронен где-то в .NET Framework или мне придется либо использовать опрос, либо оставить все как есть на данный момент?

Ответы [ 2 ]

5 голосов
/ 21 августа 2009

Вызывая .Receive в бесконечном потоке, он будет блокироваться до тех пор, пока не поступят сообщения, и вернется, когда получит сообщение. Это правильный способ сделать это.

Существуют также триггеры MSMQ, но вам просто нужно простое поведение. Получение, AFAICT.

1 голос
/ 21 августа 2009

MessageQueues также имеет асинхронный приемник:

MessageQueue mq = new MessageQueue();
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
mq.BeginReceive();

Просто убедитесь, что вы снова вызвали BeginReceive () в обработчике, например:

void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
  mq.BeginReceive();
  //do work here
}
...