异常描述:
自己写的一个处理消息队列的Windows服务,异步读取消息队列里面的消息,并进行相关的业务处理,间隔1-2个月的时间报System.Messaging.MessageQueueException: 消息队列服务不可用的异常,重启这个Windows服务就正常了,怀疑是线程死掉了。异常捕捉信息: System.Messaging.MessageQueueException: 消息队列服务不可用。在 System.Messaging.MessageQueue.ResolveFormatNameFromQueuePath(String queuePath, Boolean throwException) 在 System.Messaging.MessageQueue.get_FormatName() 在 System.Messaging.MessageQueue.add_ReceiveCompleted(ReceiveCompletedEventHandler value) 在 WSMsmqReceiveAuto.Service1.OnStart(String[] args) 准确的说是在服务器重新启动的时候会出现上述异常。
问题原因:是由于windows重启时MsMq晚于异步消息处理服务启动所导致的。仔细看下事件查看器不难看出,自己写的这个winservices启动早于MSMQ服务。所以会出现系统重启的时候报了上面的错误。解决办法:修改服务依赖,设置异步消息处理服务依赖于Msmq。
最了个bat文件
@echo======================开始安装服务===========================
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe WSReceiveKeyWordMessage.exe @echo======================安装服务结束===========================
@echo======================开始更改服务依赖=======================
REG ADD HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/WSReceiveKeyWordMessage /v DependOnService /t REG_MULTI_SZ /d MSMQ
@echo======================更改服务依赖结束=======================
@echo======================开始启动服务===========================
net start WSReceiveKeyWordMessage
@echo======================启动服务结束===========================
@pause