今天,我们已经构建了一个控制台应用程序,用于运行我们的ASP计划任务。网的网站。但是我认为这种方法容易出错,而且很难维护。如何执行计划任务(在windows/IIS/ASP。网络环境)

更新:

任务示例:

从数据库中的电子邮件队列发送电子邮件 从数据库中删除过时的对象 从谷歌AdWords检索统计数据,并在数据库中填充一个表。


当前回答

此外,如果你的应用程序使用SQL SERVER,你可以使用SQL代理来安排你的任务。这是我们通常放置重复出现的数据驱动代码(电子邮件提醒、定期维护、清洗等)的地方。SQL Agent内置的一个很好的特性是失败通知选项,它可以在关键任务失败时提醒您。

其他回答

使用Windows调度器运行网页。

为了防止恶意用户或搜索引擎蜘蛛运行它,当您设置计划任务时,只需使用查询字符串调用web页面,即:mypage.aspx?从= scheduledtask

然后在页面加载时,只需使用一个条件: 如果请求。查询string["from"] == "scheduledtask") { / / executetask }

这样,任何搜索引擎爬行器或恶意用户都无法执行您的计划任务。

我已经成功地在ASP中使用了Abidar。NET项目(这里有一些背景信息)。

此方法的唯一问题是,如果ASP。NET web应用程序从内存中卸载。由于使用率低)。我尝试过的一件事是创建一个任务,每5分钟访问一次web应用程序,让它保持活跃,但这似乎并不可靠,所以现在我使用Windows调度器和基本的控制台应用程序来做这件事。

理想的解决方案是创建一个Windows服务,尽管这可能是不可能的。如果您正在使用共享托管环境)。从维护的角度来看,这也使得在web应用程序中保持内容更容易一些。

为什么要重新发明轮子,使用Threading和Timer类。

    protected void Application_Start()
    {
        Thread thread = new Thread(new ThreadStart(ThreadFunc));
        thread.IsBackground = true;
        thread.Name = "ThreadFunc";
        thread.Start();
    }

    protected void ThreadFunc()
    {
        System.Timers.Timer t = new System.Timers.Timer();
        t.Elapsed += new System.Timers.ElapsedEventHandler(TimerWorker);
        t.Interval = 10000;
        t.Enabled = true;
        t.AutoReset = true;
        t.Start();
    }

    protected void TimerWorker(object sender, System.Timers.ElapsedEventArgs e)
    {
        //work args
    }

此外,如果你的应用程序使用SQL SERVER,你可以使用SQL代理来安排你的任务。这是我们通常放置重复出现的数据驱动代码(电子邮件提醒、定期维护、清洗等)的地方。SQL Agent内置的一个很好的特性是失败通知选项,它可以在关键任务失败时提醒您。

All of my tasks (which need to be scheduled) for a website are kept within the website and called from a special page. I then wrote a simple Windows service which calls this page every so often. Once the page runs it returns a value. If I know there is more work to be done, I run the page again, right away, otherwise I run it in a little while. This has worked really well for me and keeps all my task logic with the web code. Before writing the simple Windows service, I used Windows scheduler to call the page every x minutes.

另一种方便的运行方法是使用像Pingdom这样的监视服务。将他们的http检查指向运行您的服务代码的页面。让页面返回结果,然后可以使用该结果触发Pingdom,在出现问题时发送警报消息。