回收或重启后无法在IIS上保留Web应用程序

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

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

根据您的评论,我收集到您在服务器上安装和运行Windows服务时没有任何问题。

我的建议 – 以及我过去实现的 – 是将ASP.NET MVC应用程序仅用作创建,删除或暂停作业/触发器的UI,这些作用/触发器将保留在数据库中,这样,无论发生什么应用程序,您不会丢失您的作业/触发器,它们将在应用程序重新联机后立即执行。

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

第一步是设置并使用AdoJobStore存储Quartz.Net数据。 正如您在post中看到的那样,您可以使用一些提供商。

第二步是创建和配置Windows服务。 我会使用TopShelf来托管它。 实施非常简单明了; 另外,您可以使用此处提供的Quartz.Net集成。

如果您浏览文档,则无法在集成解决方案时遇到任何问题。

Quartz.Net依赖于你必须在app.config / web.config中添加的一些配置。 在这个答案中,有关于配置和AdoJobStore的详细说明。

要记住实现此类解决方案有几点需要注意。
您的Web应用程序将在您的配置中将属性ZeroSizeThreadPool设置为ZeroSizeThreadPool

  

或者在你的代码中:

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

并且它永远不会启动调度程序(您的Windows服务将使用它)。