我在Asp.net MVC中有一个应用程序,在某些时候我想向用户显示一个模式对话框,显示进程执行进度指示器。
幕后的过程会进行大量的数据库数据处理(基于现有数据,它会生成大量结果记录,并将其写回数据库)。流程可能需要从短暂时间到很长时间(取决于现有数据)。
应用程序将异步启动此过程(通过Ajax请求)并以相同方式显示进度。
我已经阅读了一些关于异步控制器的内容,其中一个可以异步启动一个进程,并会告知它的结束,但是没有进度指示,我不确定如何处理浏览器超时。就客户端而言,异步请求与同步请求相同。因此,客户将等待响应(据我所知)。主要区别在于服务器将以异步方式执行某些操作,因此它不会阻止其他传入请求。我应该做的是:
我不相信异步控制器以这种方式工作......
问题是我不确定我是否理解异步控制器,因此我不确定应该使用哪种方法来解决这个问题?我自己也看到了两种可能性:
答案 0 :(得分:1)
我没有在项目中使用过Asynch控制器。但是这里有一个链接到有人。
asynchronous-processing-in-asp-net-mvc-with-ajax-progress-bar
我个人在大型制作项目中使用过Number 2。
Number 2是在单独的服务器上运行的服务应用程序,使用OpenSSH在两台服务器之间进行通信。我们会定期轮询进度以通过AJAX将进度条更新到客户端UI。
此外,通过将您的网络服务器与长时间运行的流程分开,您将分离您的疑虑。您对Web服务器不感兴趣将文件写入磁盘,处理IO等,因此不应对此负责。
如果您的长时间运行过程必须被终止或失败,那么这不会影响您的Web服务器处理请求和处理事务。
另一个建议是,一个极长的运行过程不会给客户带来等待负担,给他们一个选项,以便稍后回来查看进度。即完成后给他们发电子邮件。
或者实际上向他们展示一些有趣的东西,在我们的例子中,我们有一个签名的Java Applet显示他们的流程在那个确切的时刻正在做什么。