2016-12-24 13 views
2

私のプロジェクトには8つのジョブがあります。それらはApplication_Startイベントから始まり、永遠に繰り返されます。そのうち2人は同じクラスを使用しています。 7秒ごとに1つのジョブと30秒ごとに動作する別のジョブ。しかし、彼らは1点で同じ方法を使用します。 XMLファイルから日付を読み込みます。Quartz.Netでジョブを一時停止/再開する方法

日付が現在の日付より古い場合、セッションIDが変更され、20分が追加されます。セッションIDは、両方とも同時に入力して処理しようとしているので、常に変化しています。 以下は私の必要性です:

1 - 方法を入力してください。 2 - セッションを変更する場合は、現在のタスク以外のタスクを停止します。 3 - セッションを変更してxmlに保存します。 4 - すべての受動的なタスクを再開または再開します。すべてのジョブの

private DateTimeOffset g_canlimacgetir = DateTimeOffset.UtcNow.AddSeconds(0); 
private DateTimeOffset g_canliorangetir = DateTimeOffset.UtcNow.AddSeconds(45); 
private void CanliOranlariGetir() 
{ 
    try 
    { 
     ISchedulerFactory schfack = new StdSchedulerFactory(); 
     IScheduler scheduler = schfack.GetScheduler(); 
     IJobDetail jobdetay = JobBuilder.Create<CanliOranlar>() 
      .WithIdentity("canliorangetir") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .WithSimpleSchedule(s => s.WithIntervalInSeconds(7).RepeatForever()).StartAt(g_canliorangetir).Build(); 
     scheduler.ScheduleJob(jobdetay, trigger); 
     scheduler.Start(); 
    } 
} 
private void CanliMaclariGetir() 
{ 
    try 
    { 
     ISchedulerFactory schfack = new StdSchedulerFactory(); 
     IScheduler scheduler = schfack.GetScheduler(); 
     IJobDetail jobdetay = JobBuilder.Create<CanliMaclar>() 
      .WithIdentity("canlimacgetir") 
      .Build(); 
     ITrigger trigger = TriggerBuilder.Create() 
      .WithSimpleSchedule(s => s.WithIntervalInSeconds(30).RepeatForever()).StartAt(g_canlimacgetir).Build(); 
     scheduler.ScheduleJob(jobdetay, trigger); 
     scheduler.Start(); 
    } 
} 

private Headers GetTheToken() 
    { 
     Headers h = new Headers(); 
     HttpWebResponse response = null; 
     try 
     { 
      const string session_site = ""; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(session_site); 
      Uri uri = new Uri(""); 

      request.Method = "GET"; 
      request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"; 
      request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
      request.ContentType = "text/html; charset=utf-8"; 
      request.ContentLength = 0; 
      Cookie trackerID = new Cookie("trackerId", ConfigurationManager.AppSettings["TrackerID"].ToString()) { Domain = uri.Host }; 
      DateTime tarih = DateTime.Now; 
      request.Timeout = 5000; 
      ServicePointManager.Expect100Continue = false; 
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
      ServicePointManager.ServerCertificateValidationCallback = new 
      RemoteCertificateValidationCallback(delegate { return true; }); 
      response = (HttpWebResponse)request.GetResponse(); 
      StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
      response.Close(); 
      response.Dispose(); 
      reader.Close(); 
      reader.Dispose(); 
      DateTime sesstimeout = DateTime.Now.AddSeconds(1199); 
      string getCookieHeader = response.Headers[HttpResponseHeader.SetCookie]; 
      char[] ayiricilar = { '=', ',', ';' }; 
      string[] parcalar = getCookieHeader.Split(ayiricilar); 
      int ses = 0, rv = 0, xt = 0, xct = 0; 
      if (parcalar.Length > 20) 
      { 
       h.session_timeout = sesstimeout; 
       for (int i = 0; i < parcalar.Length; i++) 
       { 
        if (parcalar[i] == "ASP.NET_SessionId") { h.sessionID = parcalar[i + 1]; ses = 1; } 
        else if (parcalar[i] == "__RequestVerificationToken") { h.request_verification = parcalar[i + 1]; rv = 1; } 
        else if (parcalar[i] == "XSRF-TOKEN") { h.xsrf_token = parcalar[i + 1]; xt = 1; } 
        else if (parcalar[i] == "XSRF-COOKIE-TOKEN") { h.xsrf_cookie_token = parcalar[i + 1]; xct = 1; } 
        if (ses == 1 && rv == 1 && xt == 1 && xct == 1) i = parcalar.Length; 
       } 
      } 
      response.Close(); 
      response.Dispose(); 

      XmlDocument doc = new XmlDocument(); 
      XmlReader xmlReader = new XmlTextReader(HostingEnvironment.MapPath("~/xml/values.xml")); 
      doc.Load(xmlReader); 
      xmlReader.Close(); 
      XmlNodeList InfoNode = doc.SelectNodes("SessionInfo/Info"); 
      InfoNode[0].Attributes["SessionExpires"].Value = h.session_timeout.ToString(); 
      InfoNode[0].Attributes["SessionID"].Value = h.sessionID; 
      InfoNode[0].Attributes["XSRF-TOKEN"].Value = h.xsrf_token; 
      InfoNode[0].Attributes["XSRF-COOKIE-TOKEN"].Value = h.xsrf_cookie_token; 
      InfoNode[0].Attributes["_requestVerification"].Value = h.request_verification.ToString(); 
      doc.Save(HostingEnvironment.MapPath("~/xml/values.xml")); 
     } 
     return h; 
    } 

答えて

1

あなたがこれを使用することができ、特定のジョブを停止し、起動したい場合は、

scheduler.PauseAll(); 

scheduler.ResumeAll(); 

しかしを使用することができます。

scheduler.PauseJob(jobdetay.Key); 

scheduler.ResumeJob(jobdetay.Key); 
+0

ありがとうございました。私は結果を報告しようとします。 –

関連する問題