有没有办法在ASP.NET Web应用程序中按时间表运行代码?

时间:2012-07-02 19:41:26

标签: c# asp.net scheduled-tasks

我有一个ASP.NET Web应用程序,可以访问服务器上的数据库。我需要的是一种在给定计划中在后台运行代码的方法,该计划从另一个源自动更新服务器数据库。

我知道如何在Windows应用程序中添加计时器,将函数链接到计时器刻度事件并启动计时器。我不知道如何在网络应用中执行此操作。

是否有针对网络应用的启动事件,或者我可以在哪里启动此后台进程,无论用户在网站上做了什么?

6 个答案:

答案 0 :(得分:6)

你不应该在ASP.NET网站上这样做 - 这是一个重要的禁忌。你想在背景.exe上使用计时器是正确的。您应该考虑创建Windows任务(由服务器任务计时器执行的控制台.exe)或Windows服务。我建议Windows服务,因为这是标准做法。

答案 1 :(得分:4)

如果您有权访问托管您网站的计算机,我会编写一个从任务计划程序运行的小应用程序。

Web服务器无意处理长时间运行的后台任务。这是错误的工具。

如果您无法访问托管计算机,那么我建议构建某种界面,以便另一台计算机重建数据库并上传它。我在最宽松,最广泛的意义上使用术语“界面”和“上传” - 应用您自己的定义。

答案 2 :(得分:1)

我几个月前一直在寻找解决方案,即使我到目前为止还没有足够的时间尝试,我想我可以与你分享这个链接。也许你会觉得它很有帮助。

如果是,请在这里告诉我。

http://quartznet.sourceforge.net/

How to use Quartz.net with ASP.NET

答案 3 :(得分:0)

您可以使用Windows服务或使用Timer Control(在Ajax类别中)

enter image description here

或者

enter image description here

答案 4 :(得分:0)

正如其他答案所述,执行此完整功能 - 更新数据库并将其安排为ASP.NET应用程序正在使用错误的工具来完成工作。

ASP.NET可用于更新数据库 - 这完全有效。它崩溃的地方是计时器。 ASP.NET应用程序并不意味着长时间运行,这是计时器工作所必需的。

如果你能做到这一点,我强烈建议使用别人建议的方法 - Windows服务或预定任务。

但是,如果您无法访问实际的服务器,除了发布ASP.NET代码 - 您无法安装服务,也无法将Windows应用程序设置为按计划运行,这里是开箱即用的想法。


设置执行更新的Web服务或ASPX页面,然后从您控制的计算机上的计划任务中调用该页面。

因此,如果这是http://www.someserver.net/updatedb.aspx,那么您无法在自己的PC上设置计划任务来调用该URL。

我认为这是一个最后的解决方案,只有在你不能做其他选择时才能使用。

答案 5 :(得分:-1)

global.asax.cs文件有一个在应用程序启动时触发的方法:Application_Start。您可以在该事件中连接您的计时器方法。请注意,根据IIS的配置方式,您的应用池可能会关闭。例如,如果没有人在20分钟内到达该站点,例如。只要确保你必须每隔X分钟运行一次IIS配置为始终运行并启动你的应用程序。这比听起来更难。最后,您可能希望使用常规的Windows计划任务。