Я пытаюсь настроить кварц для передачи значений клиенту с использованием SSE (события, отправленные сервером). То, что я хотел бы сделать, это вызвать ActionResult в контроллере каждые 5 секунд, чтобы отправить обновленное значение клиенту. В настоящее время у меня есть Quartz, чтобы запустить метод Execute()
MtGoxTickerJob
, класс, полученный от IJob
. Я не могу вызвать ActionResult таким образом, потому что MtGoxTickerJob находится вне контекста контроллера (кажется, есть способы сделать это, но все уродливые обходные пути). Есть ли способ настроить MVC ActionResult в качестве задания, инициированного планировщиком кварца?Вызов MVC ActionResult с кварцем
//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 http://signalr.net/? Пример: http://www.asp.net/signalr/overview/getting-started/tutorial-server-broadcast-with-aspnet-signalr –
Я посмотрел на signalR - но серверные события предположительно более эффективны? http://blogs.microsoft.co.il/blogs/gilf/archive/2012/04/10/using-html5-server-sent-events-with-json-and-asp-net-mvc.aspx – valen
Не уверен что более эффективно - я думаю, что его нужно судить. Что касается используемого подхода, вы упомянули: насколько я вижу, нет необходимости вообще обращаться к материалам MVC. Вы должны поместить свои события в статический BlockingCollection (например, в задание Quartz), а затем выполнить действие, которое будет обрабатываться javascript для получения списка событий (или последнего события). –