小编典典

异步启动长时间运行的进程

ajax

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

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

因此,这违反了将长时间运行的代码放入AJAX页面的目的。用户页面快速呈现,但是他们无法继续浏览一天,直到AJAX页面完成为止。我不在乎AJAX页面的输出。

有什么想法吗?


阅读 267

收藏
2020-07-26

共1个答案

小编典典

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

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

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

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

我可以尝试在某些地方挖掘一些示例,但是这些是主要的运动部​​分,这是否有帮助?

2020-07-26