3

在我们的 Web 应用程序中,用户可以进行需要更新大量数据库表的更改。所有这些的加载时间最长可达 30 秒。我不希望用户在导航到另一个页面之前等待它完成。

我已将长时间运行的代码放在其自己的页面上(例如“updateinfo.aspx”)并尝试了一些解决方案,包括对“updateinfo.aspx”的 jQuery AJAX 调用或加载调用“updateinfo.aspx”的图像文件. 在所有情况下,当“updateinfo.aspx”正在执行时,我都无法从启动 AJAX 调用的原始 HTML 页面导航到另一个 HTML 页面。Chrome 表示对“updateinfo.aspx”的请求正在等待处理。当我单击链接以离开原始 HTML 页面时,我们正在“等待 example.org...”,直到 AJAX 页面完成,然后导航到下一个 HTML 页面的请求随之而来,新页面负载。

因此,这违背了将长时间运行的代码放入 AJAX 页面的目的。用户的页面呈现速度很快,但在 AJAX 页面完成之前,他们无法通过导航到另一个页面来继续他们的一天。我不关心 AJAX 页面的输出。

有什么想法吗?

4

1 回答 1

1

您不应该在网页上下文中真正执行长时间运行的进程;当客户端应用程序是 Web 浏览器时,HTTP 请求/响应模型不支持该概念。这是我不得不多次解决的情况;你可以: -

  1. 使用 MSMQ;将消息提交到包含要执行的操作的详细信息的队列,或者
  2. 将要执行的操作的详细信息写入“作业”表

然后,您可以创建一个 Windows 服务来从队列中读取消息/从表中一次提取一个未处理的项目,并执行长时间运行的操作。

在最近的项目中,我必须从内存中执行此操作,我创建了一个位于标题中(即母版页中)的用户控件,它每 15 秒通过 jQuery Ajax 轮询数据库表一次,以检测作业何时完成,并且向用户显示一个弹出窗口,指示作业已完成。

我可以尝试在某处挖掘一些示例,但这些是主要的活动部分,这有帮助吗?

于 2013-12-18T06:19:36.003 回答