Windows service is not picking messages from MSMQ. Whenever there is a message, I have to go to Services stop and start my service, only then it picks.
Here is the code. Please let me know what have to done to make service continuously watch for messages and pick it immediately when there is one.
public partial class Service1 : ServiceBase
{
private const string MqName = @".\private$\RequestQueue";
private static MessageQueue _mq;
private static MessageQueue mq
{
get
{
if (_mq == null)
{
if (!MessageQueue.Exists(MqName))
MessageQueue.Create(MqName);
_mq = new MessageQueue(MqName, QueueAccessMode.ReceiveAndAdmin);
_mq.Formatter = new BinaryMessageFormatter();
}
return _mq;
}
}
public Service1()
{
InitializeComponent();
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
}
private void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
MessageQueue cmq = (MessageQueue)sender;
try
{
Message msg = cmq.EndReceive(e.AsyncResult);
}
catch
{
}
cmq.Refresh();
cmq.BeginReceive();
}
protected override void OnStart(string[] args)
{
if (mq != null)
mq.BeginReceive();
}
private void MsMq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
var msMq = (MessageQueue)sender;
var msg = msMq.EndReceive(e.AsyncResult);
msMq.BeginReceive();
}
protected override void OnStop()
{
if (mq != null)
mq.Close();
return;
}
}