我有一个 ASP.NET Web 应用程序,可以访问服务器上的数据库。我需要的是一种在给定时间表上在后台运行代码的方法,该时间表可以从另一个来源自动更新服务器数据库。
我知道如何在 Windows 应用程序中通过添加计时器、将函数链接到计时器滴答事件并启动计时器来执行此操作。我不知道如何在网络应用程序中执行此操作。
是否有 Web 应用程序的启动事件,或者无论任何用户在网站上做什么,我都可以启动这个后台进程的地方?
我有一个 ASP.NET Web 应用程序,可以访问服务器上的数据库。我需要的是一种在给定时间表上在后台运行代码的方法,该时间表可以从另一个来源自动更新服务器数据库。
我知道如何在 Windows 应用程序中通过添加计时器、将函数链接到计时器滴答事件并启动计时器来执行此操作。我不知道如何在网络应用程序中执行此操作。
是否有 Web 应用程序的启动事件,或者无论任何用户在网站上做什么,我都可以启动这个后台进程的地方?
您不应该在 ASP.NET 网站中执行此操作 - 这是一个主要的禁忌。您认为在后台 .exe 上使用计时器是正确的。您应该考虑创建 Windows 任务(由服务器任务计时器执行的控制台 .exe)或 Windows 服务。我建议使用 Windows 服务,因为这是标准做法。
如果您可以访问托管您网站的计算机,我会编写一个从任务计划程序运行的小应用程序。
Web 服务器并不意味着处理长时间运行的后台任务。这是错误的工具。
如果您无法访问托管计算机,那么我建议您构建某种界面,让另一台计算机重建数据库并上传它。我在最宽松、最广泛的意义上使用术语“接口”和“上传”——应用你自己的定义。
几个月前我自己也在寻找解决方案,尽管到目前为止我还没有足够的时间尝试,但我想我可以与你分享链接。也许你会发现它很有帮助。
如果是,请在这里告诉我。
您可以使用 Windows 服务或使用 Timer Control(在 Ajax 类别中)
或者
正如其他答案所述,执行此完整功能 - 更新数据库并将其安排为 ASP.NET 应用程序正在使用错误的工具来完成这项工作。
ASP.NET 可用于更新数据库 - 这是完全有效的。它发生故障的地方是计时器。 ASP.NET 应用程序并不意味着长时间运行,这是计时器工作所必需的。
如果你能做到,我强烈建议使用其他人建议的方法——Windows 服务或计划任务。
但是,如果除了发布 ASP.NET 代码之外,您无权访问实际服务器 - 您无法安装服务,也无法设置 Windows 应用程序以按计划运行,这里有一个问题-盒子的想法。
设置执行更新的 Web 服务或 ASPX 页面,然后从您控制的机器上的计划任务中调用该页面。
因此,如果这是在http://www.someserver.net/updatedb.aspx,那么您没有理由不能在自己的 PC 上设置计划任务来调用该 URL。
我认为这是仅当您无法执行其他选项之一时才使用的最后解决方案。
global.asax.cs 文件有一个在应用程序启动时触发的方法:Application_Start。您可以在该事件中连接您的计时器方法。请注意,根据 IIS 的配置方式,您的应用程序池可能会关闭。例如,如果没有人在 20 分钟内点击该站点。只需确保您必须每 X 分钟运行一次,并且将 IIS 配置为始终运行并启动您的应用程序。这比听起来要难。最后,您可能希望使用常规的 Windows 计划任务。