0

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

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

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

4

4 回答 4

3

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

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

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

于 2012-04-20T20:09:49.263 回答
1

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

于 2012-04-19T19:16:27.103 回答
0

这不是好的设计,但您可以通过 windows 服务将 xml 文件创建到本地文件夹,并且您的 asp.net mvc 应用程序访问 windows 服务编写的 xml 文件。

于 2012-04-19T19:14:05.857 回答
0

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

于 2012-04-19T19:19:14.743 回答