Solved

Help understanding the following statement:   MSMQ_.PeekCompleted += new PeekCompletedEventHandler(MSMQ__PeekCompleted)

Posted on 2008-10-17
4
884 Views
Last Modified: 2013-11-15
Greetings:

I'm trying to debug some code that uses the class 'MessageQueue'

The program fails on this line:

MSMQ_.PeekCompleted += new PeekCompletedEventHandler(MSMQ__PeekCompleted);

...and the method looks like this:

protected void MSMQ__PeekCompleted(object sender, PeekCompletedEventArgs e)
        {
            ((MessageQueue)sender).EndPeek(e.AsyncResult);     // ********* LINE 114 ************
            Message m = ((MessageQueue)sender).Receive();
            this.Fire(m.Label, m.Body.ToString());
            MainLoop();
        }

Hoping to get help understanding what is being done so I can understand why the procedure times out.  The error message I get is:

System.Messaging.MessageQueueException was unhandled by user code
  Message="Timeout for the requested operation has expired."
  Source="System.Messaging"
  ErrorCode=-2147467259
  StackTrace:
       at System.Messaging.MessageQueue.AsynchronousRequest.End()
       at ProjectObjects.Module1.CCMSMQ.MSMQ__PeekCompleted(Object sender, PeekCompletedEventArgs e) in C:\Projects\ProjectObjects\Module1\CCMSMQ.cs:line 114
       at System.Messaging.MessageQueue.AsynchronousRequest.RaiseCompletionEvent(Int32 result, NativeOverlapped* overlappedPointer)


Thanks!
0
Comment
Question by:John500
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 21

Accepted Solution

by:
silemone earned 500 total points
ID: 22742502
as far as error:  it's tellin you that you need a try{}/catch (MessageQueueException ex) block around code...there you can stackTrace to get better error message that will be more geared to MessageQueue error


string errMessage = String.Empty;

protected void MSMQ__PeekCompleted(object sender, PeekCompletedEventArgs e)
{
          try
         {
            ((MessageQueue)sender).EndPeek(e.AsyncResult);     // ********* LINE 114 ************
            Message m = ((MessageQueue)sender).Receive();
            this.Fire(m.Label, m.Body.ToString());
            MainLoop();
         }
          catch (System.Messaging.MessageQueueException ex)
         {
                errMess += ex.StackTrace.ToString();
                return;
         }
}
0
 
LVL 21

Expert Comment

by:silemone
ID: 22742527
the reason for me placing errMessage is that when debugging, you can see value of exception there also...or you can print to a file called ErrorLog.Text that you can create ...i.e..


if (! errMess.Equals(String.Empty)
{
          //create or append to error file
}
0
 

Author Comment

by:John500
ID: 22744732
The message didn't change much but here is the additional info:

System.Messaging.Message End()
System.Collections.ListDictionaryInternal
Exception raised by MyDomain\John500 / from : SYSTEMXYZ / Version : 123

I used the existing notification routine which made it look like this:

 catch (System.Messaging.MessageQueueException exe)
            {
                NotifException.NotifExcep(exe, NotifyObjects.Notify, "MSMQ - Thread");
                return;
            }

NotifException.NotifExcep(......)
{
....
       MailMessage mail = new MailMessage();
        mail.To.Add("OrgNotification" + OrgEmail.InternalDomain);
        mail.From = new MailAddress("Account Organization<OrgUserAcc" + OrgEmail.InternalDomain + '>');
        mail.Subject = "[MSMQ Excep][" + System.Environment.MachineName + "][" + user + "]  - " + info;
              if (except != null)
                  {
                      mail.Body = except.Message + "\r\n\r\n";
                            mail.Body += except.Source + " -- " + except.GetType().AssemblyQualifiedName + "\r\n\r\n";
                      mail.Body += except.StackTrace + "\r\n\r\n";
                      mail.Body += except.TargetSite + "\r\n\r\n";
                      mail.Body += except.Data;
                  }
        mail.Body += "\r\n\r\nException raised by " + user + " / from : " + System.Environment.MachineName + " / Version : " + App.Version;
        mail.Body += "\r\n\r\nMore info: [" + info + "]";
        mail.IsBodyHtml = false;
        OrgEmail.SendMail(mail);

        if (EvtWindowsEvent)
              SaveExceptionInEvt(except, user, info);
...
}

Any thoughts now about why this routine is timing out?

Thanks
0
 

Author Comment

by:John500
ID: 22771866
I don't know what it was that corrected itself but I'm not getting this error any longer.

Thanks for input while it lasted.

If you get the chance please check out this question:

http://www.experts-exchange.com/Software/Message_Queue/Q_23835057.html
0

Featured Post

Three Reasons Why Backup is Strategic

Backup is strategic to your business because your data is strategic to your business. Without backup, your business will fail. This white paper explains why it is vital for you to design and immediately execute a backup strategy to protect 100 percent of your data.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Workplace bullying has increased with the use of email and social media. Retain evidence of this with email archiving to protect your employees.
Skype is a P2P (Peer to Peer) instant messaging and VOIP (Voice over IP) service – as well as a whole lot more.
Video by: Tony
This video teaches viewers how to export a project from Adobe Premiere Pro and the various file types involved.
XMind Plus helps organize all details/aspects of any project from large to small in an orderly and concise manner. If you are working on a complex project, use this micro tutorial to show you how to make a basic flow chart. The software is free when…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question