问题
I have a simple console app that I'm using MSMQ to store messages before writing to SQL Server. I'm an MQ newbie so please forgive me if there's a stupid error. Basically, there is no error thrown and the code just runs straight through without going into the handler... Any help / guidance hugely appreciated... code as follows, thanks:-
public void MSMQ_GetMessage(string _MQ_Path)
{
//set the correct message queue
MessageQueue _msgQ = new MessageQueue(_MQ_Path, QueueAccessMode.ReceiveAndAdmin);
//set the format of the message queue
// _msgQ.Formatter = new XmlMessageFormatter(new Type[] { typeof(_TwitterStreamFeed) });
_msgQ.ReceiveCompleted += new ReceiveCompletedEventHandler(_msgQ_RecieveCompleted);
_msgQ.Formatter = new BinaryMessageFormatter();
_msgQ.BeginReceive();
}
//method to process message
public void _msgQ_RecieveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//queue that have received a message
MessageQueue _mq = (MessageQueue)sender;
try
{
//get the messge off the queue
Message _mqmsg = _mq.EndReceive(e.AsyncResult);
//set the values back into a formatted struct
_TwitterStreamFeed _ts = (_TwitterStreamFeed)_mqmsg.Body;
//now process your SQL....
_azuresql.writeMessageToStorage(_ts);
}
catch
{
}
//refresh queue just in case any changes occurred (optional)
_mq.Refresh();
//tell MessageQueue to receive next message when it arrives
_mq.BeginReceive();
}
回答1:
OK, for the novices among us... I rarely use a console app to test stuff out but I have here. The console app was ending and hence the threads sometimes started, and sometimes completed but nothing could be returned to the console as I hadn't told it to remain open. to do that just do Console.ReadKey();
来源:https://stackoverflow.com/questions/17435008/msmq-receivecompleted-not-firing