我创建了一个使用xml文件中的数据更新我的Web应用程序数据库的功能。我希望这个数据库在24小时后更新。我的问题是我不知道在代码中我应该在何处以及如何调用此方法,使得它不必由按钮单击触发,并且每24小时执行一次。 请帮助。
答案 0 :(得分:0)
ASP.NET中后台任务的部分问题在于,您没有运行标准应用程序来启动线程。
如果您开始在webapp中触发后台任务,如果某些内容导致您的appdomain失败,您的任务就会停止,您的任务可能会中途停止,如果您要更新数据库,则可能会一个严重的问题。
实现此目的最灵活的方法是使用在Windows计划任务上运行的单独应用程序,该任务会为您更新数据库。这完全将任务与webapp分开,但维护起来可能很难。 但是,它确实意味着即使您的webapp因任何原因而脱机,只要运行任务的服务器当时正在运行,数据库仍会更新。
如果您确实希望将任务嵌入到webapp中,那么类似于cron的东西将更可取,因为它将允许您根据一组规则触发任务,并将其留给自己的设备。
Quartz Scheduler可以实现这一点,但可以很繁琐地开始工作,对于简单的任务来说有时候会有些过分。对于需要在复杂的时间表中运行大量任务的更多涉及的系统而言,值得学习,并允许使用cron表达式。
HangFire是针对同一问题的不同解决方案,并且比Quartz Scheduler更简单,同时仍然允许任务的cron配置。
使用HangFire,以下内容将在每天午夜触发任务(其中UpdateDB
是运行更新的方法。)
RecurringJob.AddOrUpdate(() => UpdateDB(), "0 0 0 * * ?");
根据您的需要,HangFire可能是实现这一目标的最快捷方式。
以下内容将概述HangFire:http://docs.hangfire.io/en/latest/quick-start.html
HangFire在NuGet存档中可用,因此您可以使用NuGet包上下文菜单快速添加它,并且可以在此处找到定时任务的文档:http://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html
希望这足以让你开始。