【发布时间】:2013-04-19 06:38:10
【问题描述】:
我正在尝试设置石英以使用 SSE(服务器发送的事件)将值流式传输到客户端。我想做的是每 5 秒在控制器中调用一次 ActionResult,这会将更新后的值发送给客户端。目前我已经设置了 Quartz 来触发MtGoxTickerJob 的Execute() 方法,这是一个派生自IJob 的类。我无法以这种方式调用 ActionResult,因为 MtGoxTickerJob 不在控制器的上下文中(似乎有办法做到这一点,但都是丑陋的解决方法)。有没有办法将 MVC ActionResult 设置为由 Quartz 调度程序触发的作业?
//Quartz Scheduler
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
IJobDetail jobDetail = JobBuilder.Create<MtGoxTickerJob>()
.WithIdentity("TestJob")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.WithCronSchedule("0/5 * * * * ?")
.WithIdentity("TestTrigger")
.StartNow()
.Build();
sched.ScheduleJob(jobDetail, trigger);
sched.Start();
【问题讨论】:
-
我认为您无法在此处获得所需的内容。这不是 HTTP 协议的工作方式(请求 -> 响应)。您是否考虑过 SignalR signalr.net?示例:asp.net/signalr/overview/getting-started/…
-
我已经研究了 signalR - 但是服务器发送的事件据说效率更高? blogs.microsoft.co.il/blogs/gilf/archive/2012/04/10/…
-
不确定什么更有效-我认为需要尝试。至于您提到的使用方法:据我所知,根本不需要访问 MVC 的东西。您应该将您的事件放入静态 BlockingCollection(例如在 Quartz 作业中),然后执行将由 javascript ping 以获取事件列表(或最后一个事件)的操作。
标签: c# asp.net-mvc quartz.net actionresult