我在 Asp.net MVC 中有一个应用程序,有时我想向用户显示一个模式对话框,该对话框将显示流程执行进度指示器。
幕后的过程进行了大量的数据库数据处理(基于现有数据,它生成大量结果记录,这些记录也被写回数据库)。过程可能需要很短的时间到很长时间(取决于现有数据)。
应用程序将异步启动此过程(通过 Ajax 请求)并以相同的方式显示进度。
问题
我已经阅读了一些关于异步控制器的信息,其中可以异步启动一个进程并通知它的结束,但没有进度指示,我不确定如何处理浏览器超时。就客户端而言,异步请求与同步请求相同。因此,客户将等待响应(据我了解)。主要区别在于服务器将以异步方式执行某些操作,因此它不会阻止其他传入请求。我实际上应该做的是:
- 发出一个请求,该请求将启动该进程并响应客户端 taht 进程已启动。
- 客户端会定期轮询服务器以获取进程进度状态,并立即以百分比值返回响应(可能为 JSON)
- 当进度为 100% 时,这意味着它结束了,因此客户会知道要请求结果。
我不相信异步控制器以这种方式工作......
问题是我不确定我是否了解异步控制器,因此不确定我应该使用哪种方法来解决刚刚描述的这个问题?我自己看到了两种可能性:
- Asp.net MVC 异步控制器,如果它们可以以这种方式工作
- 根据请求处理数据并报告其进度的 Windows 服务应用程序 - 该服务将通过使用正常控制器操作将特定记录写入数据库来启动;这将启动它,然后服务会将其进度状态写入数据库,以便我的 Asp.net MVC 应用程序能够在客户端进程轮询请求中读取它。