我希望我的 ASP.NET MVC 应用每天执行一次查询。推荐的方法是什么?
我的第一个想法是在 Global.asax 中放置一个每 24 小时关闭一次的计时器,然后从 Elapsed
处理程序调用我的查询。这样做有什么陷阱吗?有没有更好的办法?
编辑
让我为我正在尝试做的事情添加一些细节。我特别希望查询在每天午夜执行。如果错过一天(例如由于服务器维护或升级应用程序),那不会是一个大问题。
编辑2
更多细节:
- 查询实际上是 INSERT,而不是 SELECT。目的是为任何应在月底更新其成员(member)资格的成员(member)添加“更新”记录。
- 我正在使用 SQL Server Compact(这是一个非常小的数据库)。
最佳答案
一定要起源于Web层吗?谁会在那里使用 HTML?通常,周期性的 SQL 查询是在数据库中安排的。如果是 MS SQL Server - 通过 SQL Agent 作业工具。 SQL Server 甚至可以发送电子邮件。
RE: edit2: 应该马上告诉你。 SQL Server Compact 与 SQL Server 不同——一方面,它没有 SQL Agent IIRC。尽管如此,调用 Web 层还是有点矫枉过正。我会将 Windows 脚本宿主文件 (.js) 与 Windows 任务计划程序结合使用。 WSH 文件可以通过 ADO 连接到数据库并做任何他们想做的事情——插入、选择,任何事情。
要检测错过的计划运行,请引入一个额外的表,其中包含计划运行的日志。然后在后续运行中,您可以分析上次运行的日期并采取相应措施。
Edit2:所以没有管理权限。您真的应该在问题中说出所有这些细节。在这种情况下,毕竟我会通过 Web 层,但调度将在我这边——我确实可以控制。让 Task Scheduler 在您这边运行并在服务器上调用 HTTP URL。要调用 URL,您可以使用类似 free CURL utility 的东西.以预定方式运行 IE 的缺点是会使窗口保持打开状态。
IIS 不是调度引擎。
Edit3 回复:评论:抱歉,我误解了您设置的性质。我自己的经历使我的判断蒙上了阴影 :) 您能否在每次登录操作期间都运行一次检查,如果自上次维护操作以来已经有一段时间了,请立即运行它?维护需要多长时间?如果它是 ~1min+,在工作线程中运行它是有意义的,这样登录用户就不会等待。
安排日常维护一般来说是个好主意,而且实现得相当频繁,但似乎您根本没有能力。
关于c# - 想在 ASP.NET MVC 中每天执行一次查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632120/