我在ASP.Net应用程序中为Scheduler作业集成了Quartz.Net。
但它不能自动运行,并且似乎在IIS回收应用程序池时它已停止。但是当我们向服务器发送请求时会触发。
阅读IIS app pool recycle + quartz scheduling之后,我试图在IIS 7.5服务器中配置相同的内容。
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />
</serviceAutoStartProviders>
然而,PreWarmCache
类已在我的网站中定义并保留所有逻辑,因为它使用网站页面中的模板。
如何在type
的网站上定义此课程? MyAssembly
的价值是多少?
如果我的项目是Web应用程序,我可以使用程序集名称。
我创建了网站。那么可能是什么价值或我应该如何配置该部分呢?
注意: PreWarmCache位于App_Code
目录下
答案 0 :(得分:0)
强烈建议您不在Web应用程序中使用Quartz.NET。应用程序池可以并且确实可以重置。虽然它们可以安排在某些时间回收,但它们仍然可以随时回收。这会产生不可预测的行为,并且难以追踪。
我强烈建议您创建一个Windows服务来处理Quartz.NET任务。它将更易于预测,更易于调试,并与Web应用程序分离。这将消除尝试始终保持应用程序池运行服务的复杂性。
如果您仍想在Web应用程序中使用Quartz.NET,那么this SO question可能有所帮助。
答案 1 :(得分:0)
这与Quartz.Net无关,而是与IIS服务器在一段时间不活动后回收应用程序池有关。
我遇到了同样的问题,但我要做的就是缓存数据。
所以我需要在applicationHost.config文件中执行以下操作:
<serviceAutoStartProviders>
<add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" />
</serviceAutoStartProviders>
然后调用一个填充XML文档的函数,并将其作为查找表存储在缓存中,以便在需要时使用。
问题是,如果我使用AssemblyQualifiedName属性,它会为我的类返回以下内容:
MyApp.PreWarmCache, App_Code.<#########>, Version=0.0.0.0, Culture=neutral, PublickKeyToken=null
#########是的,每次编译代码时都会更改。
我不想将其分成DLL,因为这会导致必须复制代码。
所以问题仍然是一样的。
我/我们可以为动态编译的ASP.NET网站的App_Code类提供显式的程序集名称吗?
现在修复它,将代码放入一个单独的程序集中,编译添加引用,现在全部完成。