ASP.NET自动执行页面

时间:2008-11-15 00:29:27

标签: c# asp.net

我长期以来一直想到某种自动清理页面执行常规维护任务,并且通过调用带有asp.net页面的1x1像素gif来调用当前页面执行的范围。 src参数。然而,我从未真正决定的一件事是如何处理这样一个页面执行的时间,这样它就不会对每个请求执行,也许就像每隔5个请求一样。或每30分钟或其他一段时间。

您如何考虑建立这样的机制?

5 个答案:

答案 0 :(得分:4)

我多次遇到这种情况,我通常最终只使用任务调度程序来调用页面,这样就可以保持一致和可靠。依赖于要调用的页面的问题是您必须确保始终有对页面的请求。如果可以保证,那么只需在应用程序级别存储一个变量,其中包含上次运行任务的时间戳,并让每个页面检查该时间戳,并在请求进入已超过某个阈值时更新它。

答案 1 :(得分:4)

听起来您可能想要使用global.asax文件 - 假设您希望每隔N次发生一次。例如,如果您想为您网站的每第5位访问者做一些事情,您可以采取以下措施:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    Application["Sessions"] = 0;
}

void Session_Start(object sender, EventArgs e) 
{
   // Code that runs when a new session is started
   Application.Lock();
   Application["Sessions"] = (int)Application["Sessions"] + 1;

   if ((int)Application["Sessions"] % 5 == 0)
   {
     DoSomething();
     Application["Sessions"] = 0;
    }
    Application.UnLock();
}

我会强烈推荐这些内容,而不是将脚本附加到GIF文件的来源。你有更多的控制和安全。

答案 2 :(得分:1)

您是否考虑过使用Windows服务?运行清理任务将占用ASP.NET线程池中的一个线程。或者,如果您正在清理SQL Server数据库,那么SQL Server代理作业可能会更好。

答案 3 :(得分:1)

stackoverflow博客中的相关条目:http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

其他人:

请注意,如果您缺乏稳定,一致的流量,则一些解决方案无效。如果IIS卸载您的应用程序,则缓存,会话和请求方法不起作用。

如果可以,请为每项服务安装Windows任务服务。制定一个动态添加/删除任务的方案。

如果您的应用是托管的,但无法安装服务,请考虑使用网站监视器点击它 - 例如siteuptime。这使您的应用程序保持在内存中,允许您点击处理程序或操作页面而不是虚拟图像,并让您确切地确定它何时运行。

答案 4 :(得分:0)

我会设置一个计时器并在计时器触发时运行清理任务。如果您希望根据请求数量进行清理,则可以缩短计时器间隔,然后在计时器触发时检查请求计数;如果请求数太少,则跳过清理。