Javascript从c#方法获得进展

Javascript从c#方法获得进展,c#,asp.net-mvc,progress,C#,Asp.net Mvc,Progress,我有一个MVC项目,在我看来,我得到了一个指向控制器中返回可下载文件的方法的链接 我的方法从各种API下载数据,并将数据处理到一个文件中。此方法需要10-15分钟才能完成 我想在我看来展示进步,什么是最好的方式?我应该在方法设置的控制器中使用全局变量,并使用异步javascript循环来获取这些值吗 如果有什么好方法可以从api请求中获得进展,我将使用以下方法: var httpWebRequest = (HttpWebRequest)WebRequest.Create(DataValu

我有一个MVC项目,在我看来,我得到了一个指向控制器中返回可下载文件的方法的链接

我的方法从各种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;

<>对于真正长时间运行的进程,您可以考虑使用Sigaalr之类的东西来发送状态更新。 因此,与其点击链接索取文件(并让浏览器在那里等待10分钟的响应),您可以:

  • 点击mvc控制器的链接“我想要这个,什么时候告诉我
    “你已经做到了”(它连接了事物的信号机端)
  • 服务器进程下载内容—当内容下载下来时,您可以跟踪它 到目前为止有多少进展和广播
  • 浏览器端信号器使用此广播(“找到x字节”或 类似-即“我做了X多”)-相应地查看更新
  • 一旦该过程完成,服务器广播发送一条“全部完成,来获取”,然后浏览器下载结果
  • (在最后一点,您甚至可以通过signalR直接将找到的内容发送回,但您可能会遇到数据限制/约束大小的问题)


    HTH

    可能使用signal,但使用诸如XSockets之类的东西和长时间运行的控制器听起来更合适。首先,由于该进程运行时间很长,但也因为它可以向任何特定的客户机发送状态/信息数据。

    另一个原因是XSockets支持Signal不支持的二进制数据。
    我认为XSockets的最新版本是商业版,但以前的版本可以免费使用。

    将您的状态保存到会话变量中,每x秒使用ajax查询一次状态,然后更新视图;-)您的API方法必须定期发送状态(以百分比或其他形式),然后您需要在jQuery中轮询更新(或者如果您使用的是HTML5,请利用服务器发送的事件)。