[英]What's the best way to handle the exceptions and how to deal with them in asp.net
[英]What's the best way to handle long running process in an ASP.Net application?
为了避免过多的架构天文学,我经常使用隐藏的iframe来调用长时间运行的流程并流回进度信息 。 结合jsProgressBarHandler之类的东西 ,您可以轻松地为较长的任务创建出色的带外进度指示,而普通的进度动画不会削减该进度指示。
在您的特定情况下,您可能希望每个任务使用一个LongRunningProcess.aspx调用,以避免这些页面超时。
例如,调用LongRunningProcess.aspx?taskID = 1将其启动,然后在该任务结束时发出一个
document.location = "LongRunningProcess.aspx?taskID=2".
恶作剧。
我们遇到了类似的问题,并通过一个异步Web服务调用来开始工作,从而解决了该问题(这意味着用户不必等待工作完成)。 然后,Web服务启动了一个SQL作业,该作业执行了该工作,并定期更新了具有该工作状态的表。 我们提供了一个UI,允许用户查询表。
我上一份工作遇到了这个确切的问题。 我发现最好的方法是启动一个异步进程,并在完成时通知用户(电子邮件或其他方式)。 由于超时和浪费生产力,让他们等待这么长时间会成问题。 让他们等待进度条会给他们一种错误的安全感,即他们关闭浏览器时可以取消该过程,但实际情况可能并非如此,具体取决于您如何设置系统。
“最佳方法”可能在某种程度上取决于这些问题的答案。
您可以创建另一个线程,并在会话或应用程序状态下存储对该线程的引用,具体取决于该线程在每个网站或每个用户会话只能运行一次。
然后,您可以将用户重定向到一个他可以监视线程进度的页面。 您可以将页面设置为自动刷新,或向用户显示刷新按钮。
线程完成后,您可以向用户发送电子邮件。
我对此的解决方案是一种带外服务,它可以完成这些任务并将其缓存在db中。
当该人第一次请求某项内容时,他们会稍等一会,然后出现,但如果刷新,它会立即显示,然后,因为它是数据库,所以现在是下一次每小时更新的一部分自上次请求起24小时。
将作业及其相关参数添加到作业队列表中。 然后,编写一个Windows服务,该服务将拾取并处理这些作业,将结果保存到适当的位置,然后通过电子邮件将结果链接发送给请求者。 提供某种类型的UI也很不错,以便用户可以检查其工作状态。
这种方法比启动单独的线程或增加超时要好得多,尤其是在您的应用程序较大且需要扩展的情况下,因为您可以根据需要简单地添加多个服务器来处理作业。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.