【问题标题】:ASP.NET background processing blocks status or UI feedbackASP.NET 后台处理阻止状态或 UI 反馈
【发布时间】:2009-11-12 14:41:37
【问题描述】:

我知道这个问题已经被问过很多次了,但我的问题有点不同。

我有让用户下载和上传 Excel 文件的页面。在下载 excel 的过程中,生成文件大约需要 2 分钟。我添加了检查点,这些检查点更新数据库的状态,例如(开始处理,处理标题......等)。我为上传做了同样的事情。

我还有一个 ajax 请求,它以固定的时间间隔检查数据库并向用户打印状态以提供反馈,例如(开始处理、处理标题等)。

问题是,我只有在流程完成后才能收到反馈。看起来会话在后台进程期间被阻止,并且任何其他请求(ajax)只有在后台进程结束后才完成。 ajax 在 4 秒的时间间隔内发出大约 10 个请求。我最后才得到 10 个响应。

我尝试了两个 iframe 和框架,一个运行 ajax,另一个运行进程,不起作用。我尝试了单独的浏览器(进程在 IE 中运行,ajax 在 FF 中运行)并且有效(所以我现在我的代码有效)。有人可以建议吗?谢谢

附言我的环境是 IIS 6,带有 MVC 1.0 浏览器的 ASP.NET 3.5 是 IE6.0

【问题讨论】:

    标签: c# asp.net-mvc iis-6 asp.net-3.5 long-running-processes


    【解决方案1】:

    您的浏览器对可以同时工作的连接数有限制。

    我相信 IE 有 2 个连接的限制。这意味着即使您正在运行 AJAX 请求,您也只能同时运行两个请求。

    这很可能是您直到最后才看到结果的原因,因为它正在处理其他连接并且在完成之前不会到达状态请求。这也解释了为什么当您从不同的浏览器执行此操作时它会起作用,因为您不会受到相同的连接限制。

    这里有一个article 详细说明了这个问题。

    【讨论】:

    • 感谢回复,不过我也试过火狐,有15个连接,连这个都不行。
    • @spiderdevil 浏览器并不是唯一限制这一点的浏览器。它实际上内置在 HTTP 1.0 和 1.1 规范中,因此服务器也可以遵守 HTTP 规范及其限制,我相信这是 4 个同时连接。
    • 我和提琴手核对过。我只看到两个连接,我的进程和我的 ajax 请求每两秒添加到队列中。一旦我的过程结束,所有的ajax响应就会回来。我该如何解决这个问题。
    【解决方案2】:

    这正是我想要的 (asynchronous-processing-in-asp-net-mvc-with-ajax-progress-bar)

    使用 IAsyncResult 的委托 BeginInvoke 有助于阻止会话

    【讨论】:

      猜你喜欢
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多