c# - ASP.NET 网页的计时器应用程序

标签 c# asp.net iis

我正在为我的办公室创建一个 Intranet 网页。

应用程序需要每 5 分钟下载一次 SMTP 电子邮件。 (以及其他一些家政用品)

我刚刚创建了一个通过 Windows 2008 R2 服务器在 IIS 上运行的 ASP.NET 网页。

我是否必须创建一个单独的 Windows 服务才能执行此操作?所以我只有 2 个程序,网页和 Windows 服务?

或者有更好的方法吗?

最佳答案

想法

在 asp.net 网站上执行重复操作的最简单方法是

  • 在应用程序启动期间,创建一个 System.Timers.Timer 对象的实例,并在您的代码中将其引用到一个static 字段(以防止垃圾回收)
  • 让它自动重置并给它你想要的间隔(5 分钟)
  • 收听 Elapsed 事件并将您的重复任务放在那里

代码

public class Global : System.Web.HttpApplication
{
    private static Timer timer;

    protected void Application_Start(object sender, EventArgs e)
    {
        timer = new Timer(5 * 60 * 1000);
        timer.AutoReset = true;
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    }

    void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        //Get our emails here
    }
}

关于应用池回收

没关系:

  • 如果您的网站有流量,那么应用程序池将保持运行状态
  • 如果有没有流量的时间跨度,应用程序池可能会停止,但您不在乎,因为没有用户会提示 :)

如果它真的很重要,请知道默认情况下,应用程序池配置为每天只回收一次,即使没有流量也不会停止。

关于c# - ASP.NET 网页的计时器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366691/

相关文章:

asp.net - 在 Microsoft Windows Server 2008 R2 中哪里可以找到 Web 共享?

c# - Xamarin.IOS 日期格式

c# - 具有从字符串到类型的隐式转换的模型绑定(bind)属性

iis - Microsoft.Owin.StaticFiles 在控制台主机中工作,但我在文件请求的 IIS 中收到 404

asp.net - 我应该如何在数据库中存储用户输入数据的本地化版本?

c# - Responce.Redirect 和 Response.RedirectLocation 有什么区别?

asp.net - SQLException : Login failed for user 'NT AUTHORITY\NETWORK SERVICE

c# - 为什么面试官要问高级问题?

c# - 如何根据自己的属性和另一个列表的属性对列表进行排序?

c# - 如何使用 executeReader() 方法仅检索一个单元格的值