【问题标题】:Application_Start() event in global.asaxglobal.asax 中的 Application_Start() 事件
【发布时间】:2009-11-25 02:54:07
【问题描述】:

大家好, 我的网站有成千上万的用户...我已经实现了每天一次向每个用户发送邮件的后台任务...我按照此链接执行此操作...

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

我的问题是 Application_Start() 是否会因每个用户访问我的网站而被解雇...如果是这样每个用户每天都会收到 n 封邮件,所以我想避免它...

【问题讨论】:

    标签: c# asp.net global-asax


    【解决方案1】:

    完整的图片 - 这是可以在 global.asax 中触发的所有事件的列表:

    http://aspalliance.com/1114_Understanding_the_Globalasax_file.3

    【讨论】:

      【解决方案2】:

      Application_Start 仅在第一个人访问站点并且 app_pool 刷新时运行。

      并非每次点击网站都会发生这种情况。

      您可能想为类似 cron 的系统考虑类似 http://www.webcron.org/ 的东西来安排任务。

      【讨论】:

      • 也许 OP 正在考虑 _BeginRequest?
      • 嗨,约翰,我在共享主机上,所以我不能使用调度程序...使用缓存项回调并每天为我的用户发送一次邮件是否安全
      • 不能依赖缓存项回调,缓存可能会提前过期,因为应用程序需要内存或其他东西,如果我是你,我会尝试使用webcron.org 或类似网站。跨度>
      【解决方案3】:

      Application_Start 和 Application_End 方法是不代表 HttpApplication 事件的特殊方法。 ASP.NET 在应用程序域的生命周期内调用它们一次,而不是为每个 HttpApplication 实例调用一次。

      所以当第一个用户打开网站时,它会点击 application_start 方法,之后就不会了。

      我要补充一点,您尝试做的事情是有风险的。如果您想批量发送电子邮件,那么您可能需要考虑可以每天发送电子邮件的调度程序。

      【讨论】:

      • 嗨,我在共享主机上,他们不允许调度程序
      • 嗨,我最近通过将网站转换为“始终在线”网站来实现在网站中运行的背景任务。应用程序池中有一个设置可以执行此操作。你可能想调查一下
      【解决方案4】:

      它应该在 Application_BeginRequest 和一个为每个访问者存储状态的数据库中。 但最合适的还是在 Scheduler 上。

      【讨论】: