• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 908
  • Last Modified:

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

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
John500
Asked:
John500
  • 2
  • 2
1 Solution
 
silemoneCommented:
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
 
silemoneCommented:
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
 
John500Author Commented:
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
 
John500Author Commented:
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now