我在开发环境中以自己的身份运行IIS / WAS托管服务。它使用net.msmq绑定激活。它配置为使用BufferedReceive(它是一个WF服务),它涉及锁定队列。 (创建了以前缀为lock_的子队列)。
一段时间后,在应用程序池终止后,锁定队列将自动删除。
将系统移至生产环境后,环境AFAIK相同,但如果服务作为专用帐户运行,则不再清除锁定队列。如果我停止应用程序池,则会保留锁定队列,并显示消息。
最明显的区别是服务运行的帐户,但我找不到哪种权限会影响这一点。或者,我有一些其他的配置差异我可以忽略。感谢帮助。
答案 0 :(得分:1)
确定这是IIS / WAS中的错误。
我有3个应用程序池,其中2个是自动启动的,其中一个使用了msmq。 All共享相同的AD域标识,该标识与NetMsmqListenerActivator共享。 netmsmqlistener服务最初是停止的,但是在我启动之后,出现了症状。
IIS / WAS以某种方式创建了多个通道,将消息发送到错误的进程。我通过创建一个单独的标识来解决这个问题,现在由mq使用的web服务和netmsmqlistener使用,然后是服务器重新启动。
这是一个痛苦的问题,只发生在生产服务器上。学到的经验是确保生产服务器与测试服务器共享相同的修补程序和修补程序。
更新:Win 2k8 R2 SP1的修补程序:http://support.microsoft.com/kb/2672277