在我们的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页面的输出。
有什么想法吗?
您不应该真正在网页上下文中执行长时间运行的过程。当客户端应用程序是Web浏览器时,HTTP请求/响应模型不适合该概念。我不得不多次处理这种情况。你可以: -
然后,您可以创建Windows服务,以一次从表中一次读取队列/拉未处理项目中的消息,并执行长时间运行的操作。
在最近的项目中,我必须从内存中创建一个用户控件,该用户控件位于标题(即母版页)中,该控件每15秒通过jQuery Ajax轮询数据库表一次,以检测作业何时完成,并且向用户显示一个弹出框,指示作业已完成。
我可以尝试在某些地方挖掘一些示例,但是这些是主要的运动部分,这是否有帮助?