关于c#:在ASP.Net应用程序中处理长时间运行的最佳方法是什么?

关于c#:在ASP.Net应用程序中处理长时间运行的最佳方法是什么?

What's the best way to handle long running process in an ASP.Net application?

在我的Web应用程序中,有一个过程可以从整个Web查询数据,对其进行过滤,然后将其保存到数据库中。可以想象,此过程需要一些时间。我当前的解决方案是增加页面超时,并在加载时向用户提供AJAX进度条。这是一个有两个原因的问题-1)它仍然需要很长时间并且用户必须等待2)它有时仍会超时。

我已经涉足线程化过程,并且已经阅读了我应该将其异步发布到Web服务("即发即弃")的信息。

我读过的一些参考文献:
-MSDN
-忘却

所以我的问题是-最好的方法是什么?

更新:用户输入数据后,我想将其重定向到结果页面,该页面随着进程在后台运行而逐渐更新。


为避免过多的体系结构天文学,我经常使用隐藏的iframe来调用长时间运行的流程并流回进度信息。结合jsProgressBarHandler之类的功能,您可以轻松地为较长的任务创建出色的带外进度指示,而一般的进度动画不会削减这些进度指示。

在特定情况下,您可能希望每个任务使用一个LongRunningProcess.aspx调用,以避免这些页面超时。

例如,调用LongRunningProcess.aspx?taskID = 1将其启动,然后在该任务结束时发出

1
document.location ="LongRunningProcess.aspx?taskID=2".

恶作剧。


我们遇到了类似的问题,并通过一个异步Web服务调用开始了工作(这意味着用户不必等待工作完成)就解决了该问题。然后,Web服务启动了一个SQL作业,该作业执行了该工作,并定期用该工作的状态更新了一个表。我们提供了一个允许用户查询表的UI。


我上一份工作遇到了这个确切的问题。我发现最好的方法是启动一个异步进程,并在完成时通知用户(通过电子邮件或其他方式)。由于超时和浪费生产力,让他们等待那么长时间会成问题。让他们等待进度条会给他们一种错误的安全感,即他们关闭浏览器时可以取消该过程,但实际情况可能并非如此,具体取决于您如何设置系统。


将作业及其相关参数添加到作业队列表中。然后,编写一个Windows服务,该服务将拾取并处理这些作业,将结果保存到适当的位置,然后通过电子邮件将结果链接发送给请求者。提供某种类型的UI也是一种不错的选择,以便用户可以检查其作业的状态。

这种方法比启动单独的线程或增加超时要好得多,尤其是在您的应用程序较大且需要扩展的情况下,因为您可以根据需要简单地添加多个服务器来处理作业。


我对此的解决方案是一种带外服务,该服务执行这些操作并将其缓存在db中。

当该人第一次请求某项内容时,他们会稍等一会,然后出现,但是如果刷新,它会立即更新,然后由于其内部数据库,它现在是每小时更新的一部分最后一个请求之后的24小时内。


您可以创建另一个线程,并在会话或应用程序状态下存储对该线程的引用,具体取决于该线程在每个网站上只能运行一次,还是在每个用户会话中只能运行一次。
然后,您可以将用户重定向到一个他可以监视线程进度的页面。您可以将页面设置为自动刷新,或向用户显示刷新按钮。
线程完成后,您可以向用户发送电子邮件。


  • 您如何查询远程数据?
  • 它多久更改一次?
  • 结果是否可以缓存一段时间?
  • 我们实际上在这里谈论多长时间?
  • "最佳方法"可能在某种程度上取决于这些问题的答案...


    推荐阅读

      linux查询命令进程?

      linux查询命令进程?,系统,名称,总量,情况,状态,进程,材料,工具,电脑,数据,怎

      查询linux内存命令?

      查询linux内存命令?,系统,情况,信息,工具,电脑,状态,命令,内存,发行,总量,查

      linux命令查询屏保?

      linux命令查询屏保?,系统,工作,工具,信息,地址,图片,命令,目录,基础,电脑,lin

      脚本linux上运行命令?

      脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,t

      linux加载过滤命令?

      linux加载过滤命令?,数据,系统,工具,标准,官网,灵活,最新,命令,文件,文件名,l

      linux查询线程命令?

      linux查询线程命令?,系统,第一,线程,命令,进程,代码,分时,软件,选项,界面,如

      linux运行脚本的命令?

      linux运行脚本的命令?,系统,工具,代码,服务,脚本,状态,密码,环境,位置,暂停,l

      linux查询ip命令?

      linux查询ip命令?,地址,网络,信息,设备,系统,电脑,终端,命令,中心,技术指标,l

      linux过滤命令参数?

      linux过滤命令参数?,工具,数据,标准,地址,命令,设备,系统,信息,指令,文件,如

      linux查询所有命令?

      linux查询所有命令?,工作,地址,系统,命令,信息,目录,工具,基础,文件,内容,lin

      linux命令过滤端口?

      linux命令过滤端口?,情况,系统,状态,网络,端口,灵活,信息,命令,终端,选项,lin

      linux命令行运行中断?

      linux命令行运行中断?,连续,工作,系统,信息,程序,命令,设备,工具,网络,情况,L

      linux日志命令查询?

      linux日志命令查询?,系统,名称,信息,实时,电脑,对比,最新,日志,命令,环境,Lin

      linux文本查询命令?

      linux文本查询命令?,标准,命令,文件,工具,数据,信息,位置,系统,内容,文本,Lin

      命令查询linux包安装?

      命令查询linux包安装?,软件,地方,地址,名字,系统,名称,信息,路径,命令,文件,

      vim运行linux命令?

      vim运行linux命令?,系统,工作,信息,地址,命令,标准,时间,情况,工具,基础,linu

      查询linux的命令历史?

      查询linux的命令历史?,信息,系统,名称,地址,服务,命令,数据,环境,指令,用户,

      linux下并行运行命令?

      linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

      linux线程查询命令?

      linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Lin