0

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;

    }
}
Diya
  • 31
  • 4
  • Add a listener/watcher for the Queue. Like this one here. https://blogs.msmvps.com/manoj/2005/10/16/a-simple-msmq-listener-helper-class/ – vendettamit Apr 04 '18 at 20:02
  • I added the listener helper class and called from my service, I am still having same issue. Service reads message when i start it but not after that protected override void OnStart(string[] args) { var listener = new MSMQListener(MqName); listener.MessageReceived += new MessageReceivedEventHandler(listener_MessageReceived); listener.Start(); } – Diya Apr 04 '18 at 20:51
  • did you get this working? I am running into a similar issue – user3614070 Sep 05 '20 at 19:47

0 Answers0