1

我有一个 IIS/WAS 托管服务在开发环境中以我自己的身份运行。它是使用 net.msmq 绑定激活的。它被配置为使用 BufferedReceive(它是一个 WF 服务),这涉及锁定队列。(创建前缀为 lock_ 的子队列)。

一段时间后,应用程序池终止后,锁定队列会自动删除。

将系统移至生产环境后,环境 AFAIK 相同,但服务作为专用帐户运行,不再清理锁定队列。如果我停止应用程序池,锁定队列仍然存在,并带有消息。

最明显的区别是运行服务的帐户,但我找不到影响这一点的权限。或者,我是否忽略了其他一些配置差异。感谢帮助。

4

1 回答 1

1

好的,这原来是 IIS/WAS 中的一个错误。

我有 3 个应用程序池,其中 2 个是自动启动的,其中一个正在消耗 msmq。所有共享同一个 AD 域标识,该标识与 NetMsmqListenerActivator 共享。那个 netmsmqlistener 服务本来是停止的,但是我启动之后就出现了症状。

IIS/WAS 不知何故创建了多个通道,将消息发送到错误的进程。我通过创建一个单独的身份来解决这个问题,现在由 mq 消费 Web 服务和 netmsmqlistener 使用,然后重新启动服务器。

这是一个痛苦的问题,只发生在生产服务器上。吸取的教训是确保生产服务器与测试服务器共享相同的修补程序和补丁。

更新:Win 2k8 R2 SP1 的修补程序:http: //support.microsoft.com/kb/2672277

于 2012-12-02T16:13:13.293 回答