好的,这里有一点背景。我有一个大型的web应用程序(MVC3),它做各种不重要的事情。我需要这个web应用程序能够在甲骨文数据库Quartz.NET 中安排临时的作业。然后,我希望稍后通过windows服务执行作业。理想情况下,我想安排他们的运行间隔均匀,但可以选择添加作业通过网络应用程序。
基本上,所需的体系结构是这种结构的一些变体:
Web <-> Quartz.NET <->数据库<-> Quartz.NET <-> Windows
到目前为止,我所做的是:
还有几个重要的注意事项:
现在,有几个问题:
即使是possible?
这个问题只要符合条件,马上就会有赏金。如果问题在那之前得到满意的回答,我仍然会把赏金颁给答案的海报。所以,无论如何,如果你在这里给出一个很好的答案,你就会得到赏金。
发布于 2012-05-31 21:10:54
我试着按你的顺序回答你的问题。
在内部,在MVC应用程序中,您需要获得对调度程序的引用,并将其存储为单例。然后,在您的代码中,您将调度作业,并通过这个唯一的实例获取有关调度程序的信息。你可以用这样的东西:
public class QuartzScheduler
{
public QuartzScheduler(string server, int port, string scheduler)
{
Address = string.Format("tcp://{0}:{1}/{2}", server, port, scheduler);
_schedulerFactory = new StdSchedulerFactory(getProperties(Address));
try
{
_scheduler = _schedulerFactory.GetScheduler();
}
catch (SchedulerException)
{
MessageBox.Show("Unable to connect to the specified server", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
public string Address { get; private set; }
private NameValueCollection getProperties(string address)
{
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "RemoteClient";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.threadPool.threadCount"] = "0";
properties["quartz.scheduler.proxy.address"] = address;
return properties;
}
public IScheduler GetScheduler()
{
return _scheduler;
}
}此代码设置Quart.Net客户端。然后,要访问远程调度程序,只需调用
GetScheduler()DataTable GetJobs() { DataTable table =新的DataTable();table.Columns.Add("GroupName");table.Columns.Add("JobName");table.Columns.Add("JobDescription");table.Columns.Add("TriggerName");table.Columns.Add("TriggerGroupName");table.Columns.Add("TriggerType");table.Columns.Add(“TriggerType”);table.Columns.Add(“en19#”);table.Columns.Add("PreviousFireTime");var jobGroups = GetScheduler().GetJobGroupNames();foreach (string group in jobGroups) { var groupMatcher =GroupMatcher.GroupContains(组);var jobKeys = GetScheduler().GetJobKeys(groupMatcher);foreach (触发器中的ITrigger触发器){ DataRow行= table.NewRow();行“GroupName”=组;行“JobName”= jobKey.Name;行“JobDescription”= detail.Description;行“TriggerName”= trigger.Key.Name;行“TriggerGroupName”= trigger.Key.Group;行“TriggerType”= trigger.GetType().Name;行“TriggerState”= GetScheduler().GetTriggerState(trigger.Key);DateTimeOffset?nextFireTime = trigger.GetNextFireTimeUtc();if (nextFireTime.HasValue) { row"NextFireTime“=trigger.GetNextFireTimeUtc} DateTimeOffset?previousFireTime = trigger.GetPreviousFireTimeUtc();if (previousFireTime.HasValue) { row"PreviousFireTime“=PreviousFireTime}table.Rows.Add(行);}}返回表;}
您可以在Github上查看此代码
https://stackoverflow.com/questions/10824581
复制相似问题