它可能不是您想要的,但我已经将 SignalR 与 Quartz.Net 一起使用,效果很好。
我在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();
}
}
}
您必须在页面中引用几个脚本:
- jquery-2.1.1.js
- jquery.signalR-2.1.1.js
以及自动生成的/signalr/hubs
现在您可以创建自己的Hub:
public class QuartzHub : Hub
{
...
}
使用允许您与 ASP.NET 页面中的脚本进行交互的方法。
假设您的 Hub 有一个方法 CheckQuartzStatus,它为您提供配置的所有 quartz.net 触发器的状态:
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();
如您所见,您的 Hub 方法有时会触发一个操作:onCheckQuartzStatus。
这是对页面中定义的 javascript 中定义的事件的调用:
quartz.client.onCheckQuartzStatus = function (message) {
alert(message);
};
您可以通过查看Default.aspx 页面中的脚本来了解交互是如何工作的。
你可以阅读更多here。