C# MVC4出现Quartz.NET错误-重写成员时违反继承安全规则
当我使用Quartz.NET和MVC4浏览我的应用程序时,我遇到了这个错误 重写成员时违反了继承安全规则:“Quartz.Core.QuartzScheduler.InitializeLifetimeService()”。重写方法的安全可访问性必须与被重写方法的安全可访问性匹配。 我无法理解发生了什么事 我在Global.asax中的代码:C# MVC4出现Quartz.NET错误-重写成员时违反继承安全规则,c#,asp.net-mvc,asp.net-mvc-4,quartz-scheduler,quartz.net,C#,Asp.net Mvc,Asp.net Mvc 4,Quartz Scheduler,Quartz.net,当我使用Quartz.NET和MVC4浏览我的应用程序时,我遇到了这个错误 重写成员时违反了继承安全规则:“Quartz.Core.QuartzScheduler.InitializeLifetimeService()”。重写方法的安全可访问性必须与被重写方法的安全可访问性匹配。 我无法理解发生了什么事 我在Global.asax中的代码: public class MvcApplication : System.Web.HttpApplication { protect
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();
}
}
公共类MVCAPApplication:System.Web.HttpApplication
{
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
BuildQuartzScheduler();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
私有void BuildQuartzScheduler()
{
//构造调度程序工厂
isSchedulerFactory schedFact=新StdSchedulerFactory();
//获取调度程序
isScheduler sched=schedFact.GetScheduler();
IJobDetail job=JobBuilder.Create().WithIdentity(“AlertasJob”).Build();
ITrigger morningTrigger=TriggerBuilder.Create()
.ForJob(job)
.WithCronSchedule(“0 6**”)
.WithIdentity(“AlertamanHattrigger”)
.StartNow()
//.WithDailyTimeIntervalsSchedule(x=>x.WithIntervalInMinutes(2))
.Build();
ITrigger nightTrigger=TriggerBuilder.Create()
.ForJob(job)
.WithCronSchedule(“0 23**”)
.WithIdentity(“AlertaNoiteTrigger”)
.StartNow()
//.WithDailyTimeIntervalsSchedule(x=>x.WithIntervalInMinutes(2))
.Build();
var triggersList=newquartz.Collection.HashSet(){morningTrigger,nightTrigger};
sched.ScheduleJob(job,触发器列表,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);
}
}
}
}
}
公共类警报作业:IJob
{
public void Execute(IJobExecutionContext上下文)
{
Parametro param=新的Parametros.Parametro();
参数Obter();
veriricarfunchonariosemepi(param);
}
公共无效VeriricarFunctionariosempi(参数参数)
{
DateTime?dataBusca=DateTime.Now;
使用(Data.Server.sinsysepienties context=new Data.Server.sinsysepienties())
{
var funcs=context.Funcionarios
.Where(i=>i.Funcao.ListaEPIs.Any());
foreach(funcs中的var functionario)
{
List lstEPI=新列表();
foreach(funcionario.Funcao.ListaEPIs中的var epi)
{
if(epi.epi.DiasUso.HasValue)
{
var-ir=
context.ItemRequisicaos
.其中(i=>i.Requisicao.CodigoFuncionario==funcionario.Codigo)
.其中(i=>i.EPI.Codigo==EPI.CodigoEPI)
.其中(i=>i.Devolvido==null | | i.Devolvido==false)
.Where(i=>i.Requisicao.Data.HasValue&&i.Quantidade.HasValue)
托利斯先生()
其中(i=>i.Requisicao.Data.Value=dataBusca.Value.AddDays(-epi.epi.DiasUso.Value*i.Quantidade.Value));
如果(ir.Count()==0)
添加(epi.epi.Nome+“(CA“+epi.epi.CA+”));
}
}
if(lstEPI.Any())
{
var alerta=新的AlertaFuncSemEPI(funcionario.Codigo、funcionario.Nome、funcionario.Funcao.Nome、lstEPI、param.EmailSemEPI);
}
}
}
}
}
谢谢你的帮助。出于这些原因,我将所有Quartz.Net代码库从Asp.Net迁移出去。无论如何,我的第一个猜测是查看应用程序运行时的信任级别。如果您在中等信任度下运行,这很可能就是问题所在
在谷歌上快速搜索Quartz.Net和mediatetrust,发现相当多的人有类似的症状。如果是这种情况,那么很抱歉,除了离开Asp.Net作为您的主机之外,我不能提供任何建议。您能提供AlertasJob类的实现吗?David,我已经用类实现编辑了这篇文章!谢谢!!!