4

我在我的 ASP.Net 应用程序中为调度程序作业集成了Quartz.Net 。

但它不能自动工作,并且似乎在 IIS 回收应用程序池时停止了。但是当我们向服务器发送请求时触发。

在阅读IIS 应用程序池回收 + 石英调度后,我试图在 IIS 7.5 服务器中配置相同的解决方案。

<serviceAutoStartProviders> 
   <add name="PreWarmMyCache" type="PreWarmCache, MyAssembly" /> 
</serviceAutoStartProviders> 

然而PreWarmCache,类已在我的网站中定义并保留所有逻辑,因为它使用网站页面中的模板。

如何从网站中定义此类type?有什么价值MyAssembly

如果我的项目是 Web 应用程序,我可以使用程序集名称。

我创建为网站。那么值可能是什么,或者我应该如何配置该部分?

注意: PreWarmCache 放在App_Code目录下

4

2 回答 2

0

强烈建议您不要在 Web 应用程序中使用 Quartz.NET。应用程序池可以并且确实会重置。虽然可以安排它们在特定时间回收,但它们仍然可以随时回收。这会产生不可预测的行为,并且难以追踪。

我强烈建议创建一个 Windows 服务来处理您的 Quartz.NET 任务。它将更可预测,更易于调试,并且与您的 Web 应用程序分离。这将消除尝试始终保持应用程序池运行以运行服务的复杂性。

如果您仍想在 Web 应用程序中使用 Quartz.NET,那么这个 SO question可能会有所帮助。

于 2013-09-06T19:15:24.827 回答
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 类提供显式程序集名称?

现在修复它,将代码取出到单独的程序集中,编译添加的引用,现在全部完成。

于 2013-10-25T13:09:21.303 回答