【发布时间】:2012-02-07 17:19:27
【问题描述】:
我们在我们的 Asp.Net Web 应用程序中实现了一个“后台服务”,它以随机的时间间隔从 MSMQ 接收消息,而不需要 HTTP 请求来启动应用程序。我们使用serviceAutoStartProvider 自动启动这个网络应用程序。
当 IIS 最初启动时一切正常,服务器重新启动等等,我们收到消息就好了。 但是如果我们只是在 IIS 中停止站点(不涉及应用程序或应用程序池),应用程序将停止接收 MSMQ 消息。而当我们再次启动网站时,serviceAutoStartProvider 并没有被再次调用,所以我们的应用也不会再次开始监听 MSMQ 消息!
如果我们在 IIS 站点停止并重新启动后向 Web 应用程序发出 HTTP 请求,它会再次开始侦听 MSMQ 消息。
即使 IIS 站点停止,我们的“后台服务”Web 应用程序是否应该继续侦听 MSMQ 消息?它不会收到任何请求,但我认为它应该继续运行。
当 IIS 站点停止时,Asp.Net 应用程序/应用程序池中究竟发生了什么?我们可以连接到任何触发的事件吗?应用程序池声称已在 IIS 管理器中“启动”,但代码并未在其中运行。
为什么站点重新启动时我们的 serviceAutoStartProvider 没有被调用?我相信这是“设计使然”,因为应用程序并没有真正停止。但应用程序也没有运行,必须由实际的 HTTP 请求唤醒。
【问题讨论】:
-
这是一个潜在的修复方法:blogs.iis.net/thomad/archive/2009/10/14/…
-
我同意,我们已经看过了,但是 Microsoft 已经取消了应用程序预热,请参阅:forums.iis.net/t/1176740.aspx。据我所知,他们还没有宣布为什么或是否会出现替代品。
标签: asp.net iis-7 iis-7.5 msmq