【问题标题】:Why Application_Start fire multiple times in Global.asax?为什么 Application_Start 在 Global.asax 中多次触发?
【发布时间】:2010-02-21 19:25:21
【问题描述】:

我有一个托管在 ASP.NET 页面中的 Silverlight 应用程序。当应用程序第一次启动并启动一些后台进程(各种定期检查)时,我需要做一些处理。

我认为 Global.asax Application_Start 事件是执行此操作的好地方,但我发现 Application_Start 会触发多次,这是我没想到的。从我读到的内容看来,当最后一个用户退出我的应用程序时,他们的会话消失了,IIS 卸载了我的应用程序。下一次请求时,它会再次加载,Application_Start 会再次运行,这并不是我真正想要的。

这是预期的行为吗?有什么办法可以让应用程序保持加载状态而不是像这样重新启动?

其次,我要运行这些定期后台进程。也许 Windows 服务对他们来说是一个更好的地方,但是在我的应用程序的静态类中运行一个计时器很方便。即使没有活跃用户,有什么方法可以让它们继续运行吗?

【问题讨论】:

  • 什么时候触发事件,也许我们可以这样提出建议。
  • 明确地说,我希望它只触发一次 - 即在对应用程序的第一次请求时,并且在服务器本身重新启动之前永远不会再次触发。
  • 你能创建一个在启动时运行的命令行项目吗?与网页分开。

标签: asp.net silverlight


【解决方案1】:

我认为您正在尝试实现一种不太适合 Web 服务器模型的行为。许多 CMS 尝试通过让一些用户 Web 请求启动工作来执行周期性任务等,但我从未见过它取得了很大的成功。

如果您不受部署问题、访问权限等的限制,我建议您使用 Windows 服务方法。只需确保将其纳入您的构建/部署过程中,以免造成麻烦。

【讨论】:

  • 不幸的是,我的部署非常受限。对于几乎是最终用户的人员部署新版本的应用程序,它需要尽可能简单。让他们也安装 Windows 服务可能太过分了!
  • 嗯,好吧,这听起来确实是个问题 :-)。用户将只安装 Silverlight 应用程序(作为浏览器外的 Silverlight 应用程序)还是他们实际上正在安装您的 Web 应用程序。如果是后者,他们会怎么做?
  • 不,这仅在服务器上。这是 Silverlight 应用程序的服务器部分 - 我只是在评论服务器管理员的一般能力。
  • 我认为我们不会找到一个好的解决方案。甚至 IIS 也经常配置为偶尔回收应用程序池。如何让 Application_Start 上运行的进程能够灵活地多次运行?这会是一个可行的解决方案吗?您的用户需要多久安装一次应用程序的新版本?创建一个安装 Windows 服务的 setup.exe 并不难。之后,可以使用“添加/删除程序”窗口删除该服务。
  • 嗨符文 - 感谢您的帮助。实际上,多次运行该过程并不是什么大问题-尽管我对它的发生感到有些惊讶。我想我会尽量让我的流程尽可能轻量级,这样当它再次运行时就不会出现问题了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多