如何基于应用程序计时器在服务器上执行方法

本文关键字:执行 方法 服务器 何基于 应用程序 计时器 | 更新日期: 2023-09-27 18:31:36

我是一个相对较新的开发人员,但我正在开发一个聚合多个XML文件的应用程序。对于一个特定的控制器,大约对基于 REST 的远程服务进行了 25 次调用,完成所有调用、解析数据和返回视图大约需要 5-7 秒。我将控制器的结果缓存 30 分钟。

我想避免的是用户在缓存过期时必须等待 7 秒。因此,我的想法是每半小时执行一次方法,该方法将XML文件聚合为单个本地文件,然后可以对其进行查询。因此,控制器将不再直接调用服务,而只是调用存储的文件。

我可以远程访问 IIS,因此无法以这种方式设置任务。它必须是一个应用层解决方案。建议?

如何基于应用程序计时器在服务器上执行方法

您可以使用

Quartz.NET,一种调度服务。它可以在嵌入式模式下运行(在 IIS 应用池的进程下运行,应该很容易与应用一起部署),也可以作为独立服务运行。如果这很重要,后者要可靠得多,因为应用程序池会频繁回收(默认情况下每 29 小时一次,或者在某个空闲时间之后,或者如果服务器重新启动,或任何数量的事件)......并且需要手动访问站点才能启动应用程序池(除非您自动启动)。

但是,听起来您的任务并不那么重要...所以我强烈考虑嵌入 Quartz.net 以下是一些示例:

  • http://quartznet.sourceforge.net/tutorial/index.html
  • 如何将 Quartz.net 与 ASP.NET 一起使用
  • http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

您也可以考虑Windows任务计划程序。

理论上,您可以在 Global.asax 中启动几个线程,这些线程将能够异步获取数据,然后将它们放入 ASP.NET 缓存中。只需确保您创建的线程不会从线程池中弹出以进行 ASP.NET。您应该能够通过将任务状态设置为 LongRunning 来使用 TPL 执行此操作。

这不是

一个好的设计,但你可以通过Windows服务创建xml文件到本地文件夹,你的 asp.net mvc应用程序访问Windows服务编写的xml文件。

我会

考虑创建一个在您的服务器上运行并为您处理更新的 Windows 服务(而不是 Web 服务)。它可以将后处理数据存储在控制器将调用的数据库中。这会将 Web 应用程序与解析数据的工作分离,并允许您在服务上使用计时器并保持 Web 应用程序更整洁。