如何保持quartz .net'

本文关键字:net 何保持 quartz | 更新日期: 2023-09-27 18:01:28

我在我的asp网站中使用石英,我在application_start方法中初始化调度器,并在application_end方法中关闭,我的触发器每天都会触发,但我发现我的调度器会自动关闭,如果有一段时间没有请求,所以我的后台工作不会触发,有没有更好的方法来保持调度器寿命长,只有在服务器停止时才关闭?

如何保持quartz .net'

为了更好的知识共享:

有两个建议:

  1. http://www.codeproject.com/Articles/12117/Simulate-a-Windows-Service-using-ASP-NET-to-run-sc
  2. http://weblog.west-wind.com/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

一般来说,如果你需要可靠的调度,你不应该在一个网站内这样做。

您已经发现,工作进程将在一段时间后关闭。即使强制工作进程一直运行,也存在可能导致它终止的条件。这不是一个好主意。

相反,你应该编写一个Windows服务并在其中运行quartz.net。

如果你不能安装服务(比如你在一个共享的主机环境中),那么你的选择就更有限了。

有一个IIS配置允许工作进程一直保持开启状态。我是通过另一个SO答案链接找到这个设置的。

编辑C:'Windows'System32'inetsrv'config' applicationHost。配置包括:

<applicationPools> 
    <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> 
</applicationPools>

Scott Guthrie(微软。net产品经理)已经回答了一个与OP的问题直接相关的问题(链接)。

@Dominic Pettifer,

如果我设置startMode="AlwaysRunning"这是否意味着web应用程序将"永不"关闭,并将永远保持运行,即使没有长时间访问网站的流量(当然,除非它是手动关闭,或服务器被关闭/崩溃等)?的我问的原因是因为我喜欢运行后台线程/服务IIS asp.net工作进程,而不是使用Windows服务(我们处理在服务器上有大量安全限制的客户端这使得运行Windows服务变得困难甚至不可能)。通常我必须设计一些定期访问网站的东西使asp.net工作进程保持活动状态并阻止它关闭下来。

这应该意味着应用程序和工作进程总是跑步-所以我认为这确实很好地处理了你的情况你。

希望有帮助,

斯科特

我也想知道同样的事情。最后,虽然我同意一般的共识,但我想看看如何做到这一点,因为我自己也有过类似的情况,Windows服务对我来说是不可用的。

我所做的就是创建一个新作业,当它被执行时,它会向应用程序本身发送一个HTTP请求。对我来说,我把它指向一个只包含@Datetime.Now.ToString()的页面。

向自身发送HTTP请求的动作应该足以使调度器(和父工作进程)保持活动。

不是,但是它阻止应用程序在没有警告的情况下被停止/回收。如果您想要一种方法来处理这个问题,那么您可能需要运行多个站点,这些站点可以ping通自己和其他站点。这样,如果一个站点宕机,另一个站点可以攻击它(假设它已经启动)使它恢复。

更简单的方法是使用质量保证检查器。使用Zapix工具,我可以安排我的网站每20分钟进行一次质量检查。Zapix只是访问了该站点并收到了一个http响应。通过使用Zapix,它模仿了手动访问网站来触发电子邮件的功能。这样,应用程序池线程就会不断被唤醒。