Как получать сообщения 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();
                }

Но я не могу получать сообщения.

Как получить эти сообщения.


person Vishnu    schedule 30.09.2013    source источник


Ответы (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.

person tom redfern    schedule 02.10.2013