2015-08-20 1 views
1

Я только начал использовать Quartz.Net - в основном я хочу запускать его как службу Windows и планировать задания, которые находятся в разных сборках, используя интерфейс IJob. Для этого по умолчанию мне нужно поставить сборки, содержащие задания (и все их зависимости) в корневую папку с помощью Quartz.exe. Все хорошо - у меня это работает. Однако я хотел бы поместить различные задания из разных сборок в определенные папки в корневом каталоге. Когда я делаю это Quartz can not, разрешаю зависимости - я понимаю, что могу создать свой собственный алгоритм сборки, но я понятия не имею, где его поставить или что его создать, - любая помощь была бы замечательной..Net Quartz Windows Service разрешает задания на работу

Я попытался создать свой собственный JobFactory и разрешить зависимые ситуации там, основываясь на предоставленном пути. Однако dosnt работы - по какой-то причине JobFactory терпит неудачу, потому что не может найти работу dependecies - который головоломная, потому что работа только создается в методе JobFactory.NewJob, как показано ниже:

public class MyQuartzJobFactory : IJobFactory 

{ // Значит ли это строка не выполняется, потому что она не может найти зависимость private static readonly ILog log = LogManager.GetLogger (typeof (MyQuartzJobFactory));

public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) 
{ 
    IJobDetail jobDetail = bundle.JobDetail; 
    Type jobType = jobDetail.JobType; 
    try 
    { 
    if (log.IsDebugEnabled) 
    { 
     log.Debug(string.Format(CultureInfo.InvariantCulture, "Producing instance of Job '{0}', class={1}", jobDetail.Key, jobType.FullName)); 
    } 

    string path = ""; 
    if (jobDetail.JobDataMap.ContainsKey("custPath")) 
    { 
     path = jobDetail.JobDataMap["custPath"].ToString(); 
    } 

    return ObjectUtils.InstantiateType<IJob>(jobType); 
    } 
    catch (Exception e) 
    { 
    SchedulerException se = new SchedulerException(string.Format(CultureInfo.InvariantCulture, "Problem instantiating class '{0}'", jobDetail.JobType.FullName), e); 
    throw se; 
    } 
} 

/// <summary> 
/// Allows the job factory to destroy/cleanup the job if needed. 
/// No-op when using SimpleJobFactory. 
/// </summary> 
public void ReturnJob(IJob job) 
{ 
    var disposable = job as IDisposable; 
    if (disposable != null) 
    { 
    disposable.Dispose(); 
    } 
} 

}

+2

Я думаю, вам нужно определить свой собственный «JobFactory», http://stackoverflow.com/questions/20587433/whats-the-purpose-of-returnjob-in-ijobfactory-interface-for-quartz-net – FSou1

+0

Нет Я пробовал это, и он работал dosnt - по какой-то причине он не сработал JobFactory, потому что он не может найти зависимости Job - что вызывает недоумение, потому что Job создается только в методе JobFactory.NewJob. – gisWeeper

ответ

1

Если у вас есть узлы в папки, где исполняемый, может быть проще использовать probing element в конфигурационном файле. Или взгляните на то, как server example устанавливает сервис и создает свою собственную службу, которая устанавливает в ней свои зависимости.

+0

Я создаю свой собственный сервер, как в примере сервера, на котором вы ссылаетесь - я просто не уверен, где я должен разрешать зависимости для сконфигурированных (с использованием конфигурации quartz_jobs.xml) Загрузки, которые загружаются. Элемент зондирования выглядит интересным - однако возможно, что разные задания в разных сборках могут использовать разные версии одной и той же зависимости. – gisWeeper