gpt4 book ai didi

Asp.net "background service"在 IIS 站点停止/启动后监听 MSMQ 不工作

转载 作者:行者123 更新时间:2023-12-02 02:19:51 27 4
gpt4 key购买 nike

我们在我们的 Asp.Net 网络应用程序中实现了一个“后台服务”,它可以随机间隔接收来自 MSMQ 的消息,而不需要 HTTP 请求来启动应用程序。我们使用 serviceAutoStartProvider 自动启动此 Web 应用程序.

当 IIS 最初启动时,一切正常,服务器重新启动等等,我们收到消息就好了。 但是 如果我们只是在 IIS 中停止站点(不接触应用程序或应用程序池),应用程序将停止接收 MSMQ 消息。当我们再次启动网站时,serviceAutoStartProvider 不会再次被调用,所以我们的应用程序不会再次开始监听 MSMQ 消息!

如果我们在 IIS 站点停止并重新启动后向 Web 应用程序发出 HTTP 请求,它会再次开始监听 MSMQ 消息。

  1. 即使 IIS 站点已停止,我们的“后台服务”Web 应用程序是否应该继续监听 MSMQ 消息?它不会收到任何请求,但我认为它应该继续运行。

  2. 当 IIS 站点停止时,Asp.Net 应用程序/应用程序池中到底发生了什么?我们可以连接的任何事件被触发了吗?应用程序池声称已在 IIS 管理器中“启动”,但代码并未在其中运行。

  3. 为什么我们的 serviceAutoStartProvider 在站点再次启动时没有被调用?我相信这是“设计使然”,因为应用程序并没有真正停止。但是应用程序也没有运行,必须由实际的 HTTP 请求唤醒。

最佳答案

当 IIS Web 应用程序关闭时(例如,由于超时时间没有新的 HTTP(S) 请求),.NET 应用程序域(在应用程序池工作进程中)完全关闭并卸载。这包括所有后台线程,包括 .NET 线程池使用的线程。

Web 应用程序可以配置更长的(或没有)超时,然后后台工作线程可以继续处理工作。

但更好的做法是在完全独立管理的专业服务流程中运行此类工作器。

或者,更好的是,使用带有 WCF 的 IIS 应用程序托管来创建 MSMQ 监听器。我了解在这种情况下,如果新消息在关闭后到达,Windows Process Activation Services 与 IIS 的集成将重新启动 Web 应用程序。

关于Asp.net "background service"在 IIS 站点停止/启动后监听 MSMQ 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com