全局.asax中的Application_Start()事件

8
大家好, 我的网站有成千上万的用户...我已经实现了每天向每个用户发送邮件的后台任务...我按照这个链接来做这个...

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

我的问题是,每个访问我的网站的用户都会触发Application_Start()吗?如果是,那么每个用户每天都会收到n封邮件,所以我想避免这种情况...
4个回答

22

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

因此,当第一个用户打开站点时,它将触发application_start方法,之后就不会再触发了。

我想强调的是,你正在尝试的做法存在风险。如果你想批量发送电子邮件,可以考虑使用定时器来每天发送邮件。


嗨,Ved。我正在使用共享主机,他们不允许使用调度程序。 - ACP
嗨,我最近通过将网站转换为“始终运行”站点并在其中实现后台任务来实现了这种运行方式。应用程序池中有一个设置可以完成此操作。您可能需要深入了解一下。 - Zeus

4

当第一个人访问站点时,Application_Start 才会运行,并且在 app_pool 刷新时也会运行。

它不会在每次访问站点时都发生。

您可能想考虑使用类似于 cron 的系统来安排任务的计划,比如 http://www.webcron.org/


也许楼主想的是_BeginRequest? - Michael Haren
嗨约翰, 我正在使用共享主机,所以我不能使用调度程序... 使用缓存项回调并为我的用户每天发送一次电子邮件是否安全? - ACP
缓存项回调不可靠,因为应用程序需要内存或其他原因,缓存可能会过早地过期。如果我是你,我会尝试使用http://www.webcron.org/或类似的网站。 - John Boker

2

0

应该放在Application_BeginRequest加上一个存储每个访问者状态的数据库中。 但最合适的是放在调度程序上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接