【问题标题】:Call an MVC ActionResult with Quartz使用 Quartz 调用 MVC ActionResult
【发布时间】:2013-04-19 06:38:10
【问题描述】:

我正在尝试设置石英以使用 SSE(服务器发送的事件)将值流式传输到客户端。我想做的是每 5 秒在控制器中调用一次 ActionResult,这会将更新后的值发送给客户端。目前我已经设置了 Quartz 来触发MtGoxTickerJobExecute() 方法,这是一个派生自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


【解决方案1】:

如何使用常规的 http 客户端调用操作?最后,如果它返回一个动作结果,那么您可能应该对它进行 http 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多