Quartz.NET from config.xml in ASP.NET

asp.net, quartz.net

Solution

Your job type needs to be specified as

<job-type>Fully.Qualified.Type.Name, AssemblyNameWithoutTheDllExtension</job-type>

Problem

Can someone advise on what I am doing wrong. I am trying to setup quartz so that on startup it will read an xml config file. Inside the file there is a job that activates my `HelloEmail_Job.cs` class (it is created correctly, extending `IJob` with the logic in the execute method). The xml also has a cron trigger for the job that will fire every minute (purely for testing). But everything starts up without an error, but the job never fires. I am sure I am configuring wrong. I have a singleton that handles the generation of my scheduler, the scheduler starts on startup of my app (in the `global.asax` file) ``` NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "RemoteServer"; ////// set thread pool info properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.useProperties"] = "true"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"; properties["quartz.dataSource.default.connectionString"] = "Data Source=CRAIG-PC\\SQLEXPRESS;Initial Catalog=MCWdb;User ID=sa;Password=mastercrud;"; properties["quartz.dataSource.default.provider"] = "SqlServer-20"; // job initialization plugin handles our xml reading, without it defaults are used properties["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz"; properties["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml"; ISchedulerFactory sf = new StdSchedulerFactory(properties); _sched = sf.GetScheduler(); ``` My `quartz_jobs.xml` file looks like this: ``` <?xml version="1.0" encoding="UTF-8"?> <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"> <processing-directives> <overwrite-existing-data>true</overwrite-existing-data> </processing-directives> <schedule> <job> <job-detail> <name>MyJob</name> <group>MyJobs</group> <description>sends out a test email</description> <job-type>HelloEmail_Job</job-type> <volatile>false</volatile> <durable>true</durable> <recover>false</recover> <job-data-map> <entry> <key>Body</key> <value>Hello From your website!!!!!!!!</value> </entry> </job-data-map> </job-detail> <trigger> <cron> <name>MyJobTrigger</name> <group>MyJobs</group> <description>A description</description> <job-name>MyJob</job-name> <job-group>MyJobs</job-group> <cron-expression>0 0/1 * 1/1 * ? *</cron-expression> </cron> </trigger> </job> </schedule> </job-scheduling-data> ``` I know that the scheduler is running correctly for ad hoc jobs with a simple trigger because when my app creates them and schedules them dynamically it works perfectly. But I want the logic made repeatable (through a cron), and configurable through a xml. My gut feeling is that the JOB_TYPE value is wrong.

Original source