I'm stumped. I'm working on an application in VB.Net that uses System.Messaging.MessageQueue to listen for messages sent to a private queue on a remote machine. Both machines are in the same Workgroup in a small private LAN. The messaging is working fine, but since the remote machine is used as a control system and has to be rebooted when there is a configuration change, I have to handle the remote queue going down and coming back up again. My application is on the "local" machine, listening for messages and processing them for a user interface. The system administrator will use my app.

I'm learning about MessageQueue from the .Net Help and MSDN documentation and stuff I can find on the internet.

The remote "Control system" machine is going to be running Windows 2000 in the field, and the local "Admin station" will run on XP. I've discovered in my development work there are differences in behavior depending on if the remote machine is 2000 or XP, so I have to find out the specifics of 2000 behavior. If the remote queue is XP, the ReceiveCompleted event is raised when the queue goes down, and the EndReceive method in the event handler throws an exception saying "Error occurs when reading from a queue on a remote computer." But with 2000, that doesn't happen. I have other means of knowing at the Admin station that the remote machine was restarted, soI thought I would play around with re-instantiating the MessageQueue object on the local machine and let it re-connect to the restarted queue. But now I'm finding that the local MessageQueue object is very inconsistent in being able to find and connect to the remote queue. I'm afraid that is another thing about MessageQueues on 2000

I thought maybe I would try to Delete() the remote queue and then Create() it new, but in a WorkGroup setting it turns out those methods don't work at all.

Does anyone know about the details of how a MessageQueue running in an application on an XP machine interacts with a queue on a 2000 machine? I'm running out of ideas to try.

Surely this must have been solved by someone at some time somewhere in the world. I can't find any clues at MSDN, either.