2014-09-03 88 views
1

我在一個asp.net站點使用石英,我用它來發射較長的後臺任務。我希望能夠使用計時器或jquery來調用該作業,並獲取狀態和進度信息,類似於我以前的做法。這裏是我正在使用的代碼:Quartz.Net ASP.NET狀態更新

protected void Timer1_Tick(object sender, EventArgs e) 
{  
    if (MyTaskManager.Instance.IsTaskRunning) 
    { 
     if (MyTaskManager.Instance.TotalItems > 0) ProgressLabel.Text = string.Format(ProgressLabel.Text, MyTaskManager.Instance.TotalItems, MyTaskManager.Instance.ItemsProcessed); 
        else ProgressLabel.Text = string.Format("Records Processed: {0}", MyTaskManager.Instance.ItemsProcessed); 
    } 
    else 
    { 
     Timer1.Enabled = false; 
    } 
} 

有沒有人做過這件事可以指出我正確的方向?

回答

1

它可能不是你要找的,但我用Quartz.Net使用了SignalR,它工作的很好。
我已經在我的repository中發佈了一個簡單的應用程序。

您必須創建一個自定義Hub,您將用它來與ASP.NET頁面進行交互。
您的(quartz.net)作業將以相同的方式通過您的Hub與您的ASP.NET頁面進行交互。

一旦你已經安裝ASP.NET SignalR

Install-Package Microsoft.AspNet.SignalR 

您可以創建一個啓動類配置SignalR:

[assembly: OwinStartup(typeof(AspNetQuartSignalR.Startup))] 

namespace AspNetQuartSignalR 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapSignalR(); 
     } 
    } 
} 

你必須引用幾個腳本在你的頁面:

  1. jquery-2.1.1.js
  2. jquery.signalR-2.1.1.js

,並自動生成/signalr /集線器

現在你可以創建自己的Hub

public class QuartzHub : Hub 
{ 
    ... 
} 

與意志方法允許您與ASP.NET頁面中的腳本進行交互。

比方說,你中心有,讓你所有的quartz.net的狀態的方法CheckQuartzStatus觸發配置:

public void CheckQuartzStatus() 
{ 
    string message = string.Empty; 

    var allTriggerKeys = Global.Scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup()); 
    foreach (var triggerKey in allTriggerKeys) 
    { 
    ITrigger trigger = Global.Scheduler.GetTrigger(triggerKey); 
    message += string.Format("{0} = {1}", trigger.Key, Global.Scheduler.GetTriggerState(trigger.Key)) + Environment.NewLine; 
    } 

    Clients.All.onCheckQuartzStatus(message); 
} 

的jQuery腳本可以在一個非常簡單的方式用這種方法進行交互:

quartz.server.checkQuartzStatus(); 

正如你可以看到在某些時候你中心方法會激發一個動作: onCheckQuartzStatus
那就是在你的JavaScript 頁面定義定義的事件的電話:

quartz.client.onCheckQuartzStatus = function (message) { 
    alert(message); 
}; 

你可以看到如何交互工作在Default.aspx頁面看劇本。

您可以閱讀更多更多here

0

您將不得不自己構建所有這些功能。 Quartz.Net作業在線程池中運行,您無法從調度程序中引用它們。你可以通過讓工作在某個地方寫下進度來做到這一點,然後讓你的計時器檢查進度。