1

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

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

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

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

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

ps 我的环境是IIS 6,ASP.NET 3.5 和MVC 1.0 浏览器是IE6.0

4

2 回答 2

1

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

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

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

这是一篇详细介绍该问题的文章。

于 2009-11-12T14:49:37.217 回答
0

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

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

于 2009-11-21T02:44:18.713 回答