【发布时间】:2014-07-12 16:43:51
【问题描述】:
当我使用 Quartz.NET 和 MVC4 浏览我的应用程序时遇到此错误。
覆盖成员时违反了继承安全规则:'Quartz.Core.QuartzScheduler.InitializeLifetimeService()'。覆盖方法的安全可访问性必须与被覆盖方法的安全可访问性相匹配。
我无法理解发生了什么。
我在 Global.asax 中的代码:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
BuildQuartzScheduler();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
private void BuildQuartzScheduler()
{
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
IJobDetail job = JobBuilder.Create<AlertasJob>().WithIdentity("AlertasJob").Build();
ITrigger morningTrigger = TriggerBuilder.Create()
.ForJob(job)
.WithCronSchedule("0 0 6 * * ?")
.WithIdentity("AlertaManhaTrigger")
.StartNow()
//.WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(2))
.Build();
ITrigger nightTrigger = TriggerBuilder.Create()
.ForJob(job)
.WithCronSchedule("0 0 23 * * ?")
.WithIdentity("AlertaNoiteTrigger")
.StartNow()
//.WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(2))
.Build();
var triggersList = new Quartz.Collection.HashSet<ITrigger>() { morningTrigger, nightTrigger };
sched.ScheduleJob(job, triggersList, true);
sched.Start();
}
}
AlertasJob 类:
public class AlertasJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Parametro param = new Parametros.Parametro();
param.Obter();
VeriricarFuncionarioSemEPI(param);
}
public void VeriricarFuncionarioSemEPI(Parametro param)
{
DateTime? dataBusca = DateTime.Now;
using (Data.Server.SinsysEPIEntities context = new Data.Server.SinsysEPIEntities())
{
var funcs = context.Funcionarios
.Where(i => i.Funcao.ListaEPIs.Any());
foreach (var funcionario in funcs)
{
List<string> lstEPI = new List<string>();
foreach (var epi in funcionario.Funcao.ListaEPIs)
{
if (epi.EPI.DiasUso.HasValue)
{
var ir =
context.ItemRequisicaos
.Where(i => i.Requisicao.CodigoFuncionario == funcionario.Codigo)
.Where(i => i.EPI.Codigo == epi.CodigoEPI)
.Where(i => i.Devolvido == null || i.Devolvido == false)
.Where(i => i.Requisicao.Data.HasValue && i.Quantidade.HasValue)
.ToList()
.Where(i => i.Requisicao.Data.Value <= dataBusca || i.Requisicao.Data.Value >= dataBusca.Value.AddDays(-epi.EPI.DiasUso.Value * i.Quantidade.Value));
if (ir.Count() == 0)
lstEPI.Add(epi.EPI.Nome + "(CA " + epi.EPI.CA + ")");
}
}
if (lstEPI.Any())
{
var alerta = new AlertaFuncSemEPI(funcionario.Codigo, funcionario.Nome, funcionario.Funcao.Nome, lstEPI, param.EmailSemEPI);
}
}
}
}
}
感谢您的帮助。
【问题讨论】:
-
能否提供AlertasJob类的实现?
-
大卫,我已经用类实现编辑了帖子!谢谢!!!
标签: c# asp.net-mvc asp.net-mvc-4 quartz-scheduler quartz.net