2015-11-08 69 views
0

我有一个MVC应用程序,它使用Quartz.NET定期发送电子邮件。尽管已发布的应用程序在IIS上正常工作,但在回收应用程序池或重新启动IIS上的应用程序后,它仍无法正常工作。在网上搜索我发现了几个帖子,建议在配置文件或IIS上做一些修改,但是没有一个能够正常工作。那么,有什么方法可以解决这个问题吗?我需要一个可以在应用程序端应用的解决方案(如果简单,只需要更改配置等,就可以在IIS端应用)。我认为这是在IIS上保留申请时的常见问题,不是吗?
注:我使用Windows Server 2008和IIS 7.5。在回收或重新启动后无法在IIS上保持活动状态

+1

Web应用程序在哪里发布? ISP还是内部?我已经[回答](http://stackoverflow.com/a/31960404)几个月前关于应用程序池和quartz.net的问题。 – LeftyX

+0

@LeftyX Mnay感谢您的回复。实际上,你展示了可能性,然后在IIS服务器上强制应用程序始终处于活动状态。我在IIS服务器上发布了应用程序,根据您的文章,我认为使用Windows Service的最佳选择。那么,请你澄清我应该做什么改变?我有一个MVC5 Web应用程序,不知道如何每周触发应用程序或Quartz工作?我知道Windows计划程序设置,我只需要在应用程序,石英和窗口端执行其他设置。非常感谢。 –

+0

这对我来说似乎是一个配置问题。可能是应用程序在重新启动IIS时未完全死亡,或者可能是启动配置不是100%正确的。只是猜测。 –

回答

1

你不会在你的问题中提到你的应用程序将在哪里运行,所以我想它将在内部托管。

关注你的评论我收集你没有任何问题在你的服务器上安装和运行Windows服务。

我的建议 - 以及我以前实现的东西 - 是将ASP.NET MVC应用程序仅用作创建,删除或挂起作业/触发器的UI,这些作业/触发器将保存在数据库中,无论您的应用程序发生什么,您都不会失去工作/触发器,只要应用程序重新联机,它们就会立即执行。

数据库将与另一层Windows服务共享,该服务将负责运行您的预定作业。

第一步是设置和使用AdoJobStore来存储Quartz.Net数据。正如您在帖子中看到的那样,您可以使用几个提供商。

第二步是创建和配置您的Windows服务。我会用TopShelf来承载它。实施非常简单直接;加上你可以使用Quartz.Net集成提供的here

如果您仔细阅读文档,您将无法发现整合解决方案的任何问题。

Quartz.Net取决于你必须添加的一些配置在你的app.config/web.config。在这个answer中有关于配置和AdoJobStore的详细解释。

有几件事要记住实施这种类型的解决方案。
你的Web应用程序会为属性threadPool在你的配置设置为ZeroSizeThreadPool

<add key="quartz.threadPool.type" value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" /> 

或代码:

properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz"; 

,它永远不会启动调度程序(你的windows服务去使用它)。

+0

非常感谢您的详细解释。我只是有时间继续进行,并且希望确定如果在同一个解决方案中使用除MVC应用程序之外的控制台应用程序并从Windows计划任务调用此应用程序更好。因为我尝试了很多东西,但都没有工作,我真的不想用除了现在的方法以外的其他方法。任何有关使用控制台应用程序或保持Quartz或Hangfire应用程序(发布到IIS)活动的想法? –

相关问题