C# MVC4出现Quartz.NET错误-重写成员时违反继承安全规则

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

当我使用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();
        }
    }
公共类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,我已经用类实现编辑了这篇文章!谢谢!!!