【问题标题】:Trigger long running process in MVC without UI blocking在没有 UI 阻塞的情况下触发 MVC 中长时间运行的进程
【发布时间】:2014-11-06 05:26:25
【问题描述】:

我想要一些一般性的指导方针

我有什么

  • UI 点击按钮 --> 动作
    • 使用 EF 从表中获取所有 foo
    • 读取所有相关的 FTP 文件(用于 Foo 的)
    • 解析 FTP 文件
    • 更新 Foo(EF 批量更新)
    • 将 Foo 返回 UI

完成此操作大约需要 2 分钟

我想要什么

  • 无按钮,触发此过程(每 15 分钟一次)
  • 完成后自动刷新 UI

过去几个月我学到了很多东西,但我不知道如何开始。

我们将不胜感激

【问题讨论】:

  • 为什么不创建一个简单的 Windows 窗体应用程序/服务。您还可以使用 Windows 调度程序每 15 分钟执行一次任务。

标签: asp.net-mvc


【解决方案1】:

无按钮,触发此过程(每 15 分钟一次)

根据说明,该过程需要在服务器上重复运行,您可以在服务器端代码上使用Timer。正如in this question所指出的,Timer 有多种变化,每种都适合不同的用途。

我碰巧找到了一篇很棒的文章,它演示了如何使用基于计时器 + SignalR 的 UI 更新。请参考这个link

要在客户端触发进程,您可以使用计时器并将其配置为每 15 分钟运行一次。您可以使用 setInterval 和 clearInterval API:

var timer = setInterval(function(){LoadValues(), 5000});

完成后自动刷新用户界面

这里有多种选择:

  1. 首先并且可能最简单的是,当您的计时器函数触发时,向服务器发送 AJAX 请求并获取更新的数据。用更新的数据替换 UI 上的内容。这基本上是轮询。

  2. 您可以使用 SignalR 刷新 UI。当更新可用时,其服务器将更新推送到连接的客户端。更多信息here

【讨论】:

  • 感谢您的快速响应。我实际上希望服务器触发更新,而不是客户端。
  • @DannyDeBoiserie - 哦,我明白了,否则我有印象。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
相关资源
最近更新 更多