首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在服务器上执行基于应用程序计时器的方法?

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

Stack Overflow用户
提问于 2012-04-20 03:10:15
回答 4查看 380关注 0票数 0

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-21 04:09:49

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

然而,听起来你的任务并不是那么关键...因此,我强烈建议使用嵌入式Quartz.net。下面是几个示例:

  • http://quartznet.sourceforge.net/tutorial/index.html
  • How to use Quartz.net with ASP.NET
  • http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

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

票数 3
EN

Stack Overflow用户

发布于 2012-04-20 03:16:27

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-20 03:14:06

这不是一个好的设计,但是你可以通过windows服务在本地文件夹中创建xml文件,并且你的asp.net mvc应用程序可以访问windows服务写入的xml文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10235105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档