2012-04-24 21 views
5

¿Puede alguien aconsejarme sobre lo que estoy haciendo mal? Estoy intentando configurar qurtz para que al inicio lea un archivo de configuración xml. dentro del archivo hay un trabajo que activa mi clase HelloEmail_Job.cs (se crea correctamente, extendiendo IJob con la lógica en el método de ejecución). el xml también tiene un desencadenador cron para el trabajo que se activará cada minuto (puramente para pruebas)quartz.net de config xml en asp.net

pero todo se inicia sin error, pero el trabajo nunca se dispara. Estoy seguro de que estoy configurando mal

que tiene un producto único que se encarga de la generación de mi planificador, el cedular comienza en el inicio de mi aplicación (en el archivo global.asax)

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(); 

mi quartz_jobs.xml archivo es el siguiente

 <?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> 

sé que el cedular está funcionando correctamente para puestos de trabajo ad hoc con un simple gatillo porque cuando mi aplicación y los horarios crea de forma dinámica que funciona perfectamente. pero quiero que la lógica sea repetible (a través de un cron) y configurable a través de un xml

mi intuición es que el valor de JOB_TYPE es incorrecto.

Gracias

+0

nota: este es un sitio web, y presentar mis HelloEmail_Job.cs vidas en APP_CODE \ \ programador de puestos de trabajo. si esto ayuda en absoluto – Crudler

Respuesta

6

el tipo de trabajo tiene que ser especificados como

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

Gracias. pregunta sobre esto tho. el mío es un sitio web asp.net. mi clase vive en la carpeta app_code. No he compilado mi sitio web en un dll. ¿Cómo determino el nombre completo? ¡Gracias! – Crudler

+1

var name = yourVariable.GetType(). Name te da el nombre, .Namespace te da el espacio de nombre y .Assembly te da el nombre del ensamblado. No sé si podrá cargar desde el código de la aplicación porque asumo que el nombre del ensamblado cambiará cada vez que se compile. – jvilalta

+0

gracias. Tu consejo me mostró lo que estaba mal. mi carpeta app_code estaba obteniendo nombres divertidos porque se compila dinámicamente. si precompilo mi aplicación, está ordenada. así que todo lo que se puede hacer es HelloJob, APP_CODE gracias por la ayuda – Crudler