【发布时间】:2011-09-04 20:52:41
【问题描述】:
我正在 Windows 服务中连接到远程 MSMQ,并按如下方式执行 BeginReceive:
msmq.ReceiveCompleted += new ReceiveCompletedEventHandler(Process);
msmq.BeginReceive();
Process 方法获取消息并像这样调用 EndReceive:
message = msmq.EndReceive(asyncResult.AsyncResult);
然后处理消息,然后像这样再次调用 BeginReceive:
msmq.BeginReceive();
问题在于,由于某种原因,当 MSMQ 服务器重新启动时,Process 方法会触发,并到达 EndReceive 行,然后引发 MessageQueueException。远程服务器重新启动后,在我重新启动 Windows 服务之前,不会再收到和处理任何消息。
在我看来,ReceiveCompletedEventHandler 方法(进程)正在触发,以及为什么在远程服务器重新启动后没有收到更多消息 - 我不太确定如何确保在重新启动后重新建立连接。
有人知道为什么会这样吗? (以及如何解决它?)。
注意 - 我现在添加了一些代码来处理 EndReceive 调用引发此特定错误时的情况,并再次循环调用 BeginReceive()(使用 Thread.Sleeps)直到没有任何错误更多的。令人讨厌的是,即使在 MSMQ 服务器备份并且 BeginReceive 似乎工作(即不抛出任何错误)时这似乎工作,仍然没有收到任何消息。
【问题讨论】:
标签: c# windows-services connection msmq reboot