Click here to Skip to main content
15,908,776 members

Comments by Member 11837253 (Top 6 by date)

Member 11837253 5-Apr-18 10:54am View    
Deleted
I am still having same issue. I have to manually stop and start service everytime to read messages from msmq. Here is my code

protected override void OnStart(string[] args)
{
JobModel job = new JobModel();
MessageQueue msMq = new MessageQueue(MqResponseName);
msMq.Formatter = new XmlMessageFormatter(new Type[] { typeof(JobModel) });

while (mq != null)
{
var msg = (JobModel)mq.Receive().Body;
job.ClientId = msg.ClientId;
job.LDS = msg.LDS;
msMq.Label = job.LDS + "Recieved";
//sending message from request queue to response queue with Status "Recieved"
msMq.Send(msg);
}
}
Member 11837253 4-Apr-18 17:04pm View    
Deleted
I tried that code, it didn't worked.

protected override void OnStart(string[] args)
{
while (mq != null)
mq.Receive();
}
Member 11837253 4-Apr-18 16:27pm View    
Windows service picking messages only when i start it and after that it stops listening
Member 11837253 4-Apr-18 16:25pm View    
I added but no luck. I modified code
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)
{
while(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;

}
}
Member 11837253 4-Apr-18 15:51pm View    
Deleted
OnStart method I am already checking like this:

protected override void OnStart(string[] args)
{
if (mq != null)
mq.BeginReceive();
}