【问题标题】:Quartz.NET error with MVC4 - Inheritance security rules violated while overriding memberMVC4 的 Quartz.NET 错误 - 覆盖成员时违反了继承安全规则
【发布时间】: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


【解决方案1】:

出于这些原因,我已将我们所有的 Quartz.Net 代码库从 Asp.Net 迁移出来。无论如何 - 我的第一个猜测是查看您的应用程序运行的信任级别。如果您以中等信任度运行,这很可能是问题所在。

Quartz.Net 和中等信任度的快速谷歌显示不少人的症状似乎相似。如果是这种情况,那么很抱歉,除了离开 Asp.Net 作为您的主机之外,我无法提供任何建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-29
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多