【问题标题】:How can I get feedback to the UI on a long running process in MVC?如何在 MVC 中获得关于长时间运行进程的 UI 反馈?
【发布时间】:2015-04-16 12:54:24
【问题描述】:

我有一个大的照片文件夹 (36Gb),我想重命名、移动和检查重复项。我首先处理文件的重命名和移动。不久前我创建了一个类似于控制台应用程序的东西,它可以工作,但没有提供任何机制来向 UI 提供进度反馈,所以这似乎会在完成前挂起近一个小时。

如果我想在 MVC 中执行此操作,我如何利用 api 端点或控制器操作来触发服务并在每次重命名和移动文件时获得响应?我希望能够计算文件的数量,然后将 UI 更新为 10000 中的 2323。

【问题讨论】:

  • 这是一个很难用 Web 应用程序解决的问题,原因很简单,Web 应用程序或多或少是“无状态的”。它们在一个 Web 请求的整个生命周期内都存在。现在,您想在很长一段时间内做一大堆事情……这比单个 Web 请求要长得多。这是可以做到的,但它需要大量的基础设施才能实现,坦率地说,除非你正在构建某种商业系统来做到这一点,否则这是不值得的。

标签: asp.net asp.net-mvc async-await


【解决方案1】:

如果您不想对 Web 应用程序进行重大更改,并且可以在服务器上运行控制台应用程序,那么您可以做一个简单的 hack。

控制台应用程序可以将状态写入文件。在网络应用程序中读取文件并以适当的格式显示。为了不断更新,控制台应用程序必须经常写入当前状态。使用 ajax,您可以每 x 秒更新一次用户。

你可以像下面这样使用json格式

{
    "Total_Files" : xxx
    "Processed_Files" : yyy
    "Last_Operations" : 
         [ 
             "File x is renamed",
             "File x is duplicate. deleted"
         ]//"x amount of last operation you want to display" 
}

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多