簡體   English   中英

.Net Quartz Windows Service解決作業依賴性

[英].Net Quartz Windows Service resolve job dependencies

我剛剛開始使用Quartz.Net-基本上我想將其作為Windows服務運行,並使用IJob界面計划在不同程序集中的作業。 默認情況下,要執行此操作,我需要將包含Jobs(及其所有依賴項)的程序集與Quartz.exe放在根文件夾中。 一切都很好-我已經做好了。 但是,我想將來自不同程序集的不同作業放入根目錄下的特定文件夾中。 當我這樣做時,Quartz無法解析依賴關系-我意識到我可以創建自己的程序集解析器,但是我不知道將其放置在何處或應實例化它-任何幫助都將非常有用。

我嘗試創建自己的JobFactory並根據提供的路徑在其中解決依賴項。 但是,它不起作用-由於某種原因JobFactory失敗,因為它找不到Job依賴關系-這令人困惑,因為Job僅在JobFactory.NewJob方法中創建,如下所示:

  public class MyQuartzJobFactory : IJobFactory

{//此行然后失敗,因為它找不到依賴項私有靜態只讀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();
  }
}

}

如果程序集位於可執行文件所在的文件夾中,則使用配置文件中的探測元素可能會更容易。 或者,看看服務器示例如何安裝服務並創建自己的服務來在其中設置程序集依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM