我有一个MVC项目,在我的视图中,我获得了一个指向我的Controller中的方法的链接,该方法返回一个可下载的文件。
我的方法从各种API下载数据并将数据处理到文件。此方法需要10-15分钟才能完成。
我想在我的视图中显示进度,这样做的最佳方法是什么?我应该在我的控制器中使用我的方法设置的全局变量,并使用异步javascript循环来获取这些值吗?
有没有什么好方法可以从api请求中获得进展,我使用以下方法:
var httpWebRequest = (HttpWebRequest)WebRequest.Create(DataValues.xx + "url/" + label + "/" + UUID + "?action=" + act);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";
httpWebRequest.Credentials = new NetworkCredential(DataValues.user, DataValues.password);
httpWebRequest.PreAuthenticate = true;
答案 0 :(得分:1)
对于真正长时间运行的进程,您可以考虑使用SignalR之类的东西来发回状态更新。
所以 - 不是点击链接来要求文件(并让浏览器在那里等待响应10分钟),你可以:
(最后一点,您甚至可以通过signalR直接发回找到的内容,但是您可能会遇到围绕数据限制/约束大小的问题。)
HTH
答案 1 :(得分:0)
可能有信号器,但使用XSockets之类的东西和长时间运行的控制器听起来更合适。首先,自那个过程以来它运行很长时间,但也因为它可以将数据发送到具有status / info的任何特定客户端。 http://xsockets.net/docs/4/controllers
另一个原因是XSockets支持信号器没有的二进制数据。 我认为XSockets的最新版本是商业版,但以前的版本是免费使用的。