【问题标题】:How to make the download action asynchronous in asp.net mvc 3?如何在 asp.net mvc 3 中使下载动作异步?
【发布时间】:2013-08-27 01:38:46
【问题描述】:

我正在将文件流式传输到客户端以供下载。但是文件大小可能非常大(最多几 GB),因此我不想阻止用户单击网页上的其他按钮,这些按钮与下载相同的控制器。从网上阅读,我发现我可以使用“Async”和“Completed”后缀使其异步,这是我的代码:

    public void DownloadAsync(string filename, string Id, string docId)
    {
        AsyncManager.OutstandingOperations.Increment();

        // code to get the file from server and send it to client.

        AsyncManager.OutstandingOperations.Decrement();

    }
    public ActionResult DownloadCompleted()
    {
        return RedirectToAction("Index");
    }

     public string OtherAction()
     {
         // code for this action.
     }

当我单击网页上的下载并单击“OtherAction”按钮时。它仍然同步处理请求。 “OtherAction”只是向用户返回一个字符串,并不耗费时间,这就是我没有让它异步的原因。

我是否需要在 .Increment() 和 .Decrement() 操作之间包含一些代码以将下载文件的代码包装在“某物”内以启动新线程或类似的东西?我无法弄清楚我在这里还缺少什么。我从 AsyncController 继承控制器。

【问题讨论】:

  • 你需要使用jquery ajax函数并将数组bites发送到服务器,在那里你可以处理它们并像json一样发送给客户端
  • 它可能看起来是同步的原因,因为大多数浏览器同时只打开两个连接。

标签: asp.net-mvc asp.net-mvc-3 asynchronous


【解决方案1】:

我认为您在这里遗漏了一些概念。你有两个部分。

服务器
即使不使用任何 Async,每个请求都是异步的,因此用户可以向服务器发送其他请求而不会被阻塞。

客户
只要用户开始下载并且不退出浏览器或停止下载,用户就可以继续在同一个选项卡或另一个选项卡中进行操作。下载完成的请求不会停止。

因此,您无需在服务器中进行任何异步操作。如果下载量很大,我会建议我的用户使用一些下载管理器

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2011-03-21
    相关资源
    最近更新 更多