Как получать сообщения MSMQ
Какой лучший способ получать сообщения MSMQ.
Я использовал следующий код, но после получения сообщений MSMQ не удалялся в очереди
var msgEnumerator = myQueue.GetMessageEnumerator2();
var messages = new List<System.Messaging.Message>();
while (msgEnumerator.MoveNext(new TimeSpan(0, 0, 1)))
{
var msg = myQueue.ReceiveById(msgEnumerator.Current.Id, new TimeSpan(0, 0, 1));
messages.Add(msg);
for (int i = 0; i < messages.Capacity; i++)
{
String DataMessages = messages[i].ToString();
}
Но я не могу получать сообщения.
Как получить эти сообщения.
1 ответ
Решение
Я бы использовал асинхронный MessageQueue.BeginPeek, чтобы начать прослушивание очереди:
queue.BeginPeek();
Затем зарегистрируйте обработчик с событием MessageQueue.PeekCompleted:
queue.PeekCompleted += new PeekCompletedEventHandler(MessageHasBeenReceived);
Затем в вашем обработчике используйте MessageQueue.EndPeek для доступа к сообщению. Не забудьте позвонить в BeginPeek снова.
private void MessageHasBeenReceived(object sender, PeekCompletedEventArgs e)
{
// Get message
var msg = queue.EndPeek(e.AsyncResult);
// Do message processing here
....
// Remove message from queue
queue.ReceiveById(msg.Id);
// Listen for more messages
queue.BeginPeek();
}
Смотрите здесь для примера MSDN.