Estoy intentando implementar Quartz.NET como un servicio de Windows en C#. Mis trabajos no se disparan cuando espero que se disparen ... en absoluto, en realidad, por lo que puedo ver.Quartz.NET - ¿Los trabajos no se ejecutan?
Tengo mi programa de trabajo ejecutándose a partir del minuto siguiente incluso después de la ejecución "minuciosamente". Sin embargo, cuando llega el próximo minuto, parece que no puedo decir si realmente funciona algo.
Supongo que cuando se ejecuta mi trabajo, una ventana CLI aparecería en la ejecución del trabajo, y las operaciones de la Consola serían visibles, (incluso puse un Console.ReadKey()
para asegurar que la ventana no se abre y cierra tan rápido No puedo verlo), pero hasta donde sé, el cronograma simplemente no está ejecutando trabajos.
Me di cuenta de que todos los tiempos están en UTC, y que el StartTimeUtc
se configurará a la hora UTC que es +6 horas desde la hora de mi computadora local, pero también asumiría que el planificador de Quartz maneja eso calculando la ejecución desde mi configuración de TimeZone, aunque no tengo manera de saberlo para confirmarlo, ni para confirmar los tiempos ACTUALES en los que está configurado mi horario.
Imagino que hay alguna forma de configurar el ensamblado de Registro común y utilizarlo para ayudarme a saber cuál es mi estado, pero aún tengo que averiguar qué hacer con eso para habilitar un registro de cualquier tipo para obtener retroalimentación de mi Servicio de Windows, además de escribir en el registro de eventos que creé para él.
Mi función OnStart de mi servicio de Windows
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("--- STARTING eLoyalty Scheduler Service ---");
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
// construct job info
JobDetail jobDetail = new JobDetail("eLoyaltySchedulerService", null, typeof(PortalSchedulerJob));
jobDetail.JobDataMap["jobSays"] = "eLoyalty Scheduler Service Executing!";
jobDetail.JobDataMap["myStateData"] = new ArrayList();
// fire every minute
Trigger trigger = TriggerUtils.MakeMinutelyTrigger();
// start on the next even minute
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
// name it
trigger.Name = "NextEvenMinute";
// schedule it
sched.ScheduleJob(jobDetail, trigger);
// start the schedule
sched.Start();
eventLog.WriteEntry("--- STARTED eLoyalty Scheduler Service ---");
}
de mi trabajo Ejecutar() función es la siguiente:
public void Execute(JobExecutionContext context)
{
try
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
JobDataMap dataMap = context.MergedJobDataMap;
string jobSays = dataMap.GetString("jobSays");
ArrayList state = (ArrayList)dataMap["myStateData"];
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of PortalSchedulerJob says: {1} @ {2}", instName, jobSays, DateTime.UtcNow);
Console.ReadKey();
}
catch (JobExecutionException Ex)
{
throw Ex;
}
}
Si usted puede ayudar a averiguar cómo solucionar mi actividad de planificación real, Puedo ser capaz de resolver esto por mi cuenta ...?
Si mal no recuerdo, Console.Anything explota un servicio de Windows. –