如何接收MSMQ消息

时间:2013-09-30 12:45:40

标签: msmq netmsmqbinding msmq-wcf

接收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 个答案:

答案 0 :(得分:2)

我会使用异步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示例。