我希望我的asp.net mvc应用程序每天执行一次查询。推荐的方法是什么?
我的第一个想法是在global.asax中设置一个每24小时关闭一次的计时器,然后从Elapsed
处理程序调用我的查询。这样做有什么陷阱吗?有更好的办法吗?
编辑
让我在我想做的事情上再加一点细节。我特别希望查询在每天午夜执行。如果错过了一天(比如服务器维护或升级应用程序),那就不是什么大问题。
编辑2
更多细节:
查询实际上是一个insert,而不是select。其目的是为任何将于月底续期的会员添加“续期”记录。
我使用的是sql server compact(它是一个非常小的数据库)。
最佳答案
它一定要起源于网络层吗?谁会在那里使用html?通常,周期性的sql查询是在数据库中安排的。对于MS SQL Server-通过SQL代理作业工具。SQL Server甚至可以发送电子邮件。
回复:伊迪丝2:应该马上告诉你的。SQL Server Compact与SQL Server不同—首先,它没有SQL代理IIRC。尽管如此,调用web层还是有点过头了。我将使用windows脚本主机文件(.js)与windows任务调度程序结合使用。wsh文件可以通过ado连接到数据库,并且可以做任何他们想做的事情-插入、选择、任何事情。
要检测错过的计划运行,请引入带有计划运行日志的额外表。然后在随后的运行中,您可以分析最后一次运行的日期并相应地执行操作。
编辑2:所以没有管理权限。你真的应该把问题的所有细节都说出来。在这种情况下,我会通过网络层毕竟,但调度将在我的末端-在那里我有控制权。让任务调度程序在您的终端运行,并在服务器上调用http url。要调用url,可以使用类似free CURL utility的内容。按预定的方式运行ie有一个让窗口保持打开的缺点。
IIS不是计划引擎。
评论:对不起,我误解了你的设置。我自己的经验模糊了我的判断:)你能在每次登录操作期间运行一次检查吗?如果上次维护操作已经过去一段时间了,那么就立即运行它吗?保养要多长时间?如果是~1分钟+,则在工作线程中运行它是有意义的,这样登录用户就不会等待。
一般来说,安排日常维护是一个好主意,而且它经常被实现,但是看起来你根本没有这个能力。