长时间运行的任务 - 最佳实践 - ASP.NET 4.0,C#

时间:2012-03-06 02:29:15

标签: c# asp.net ajax web-services

处理需要很长时间才能执行的流程的推荐方法是什么?我不想简单地在服务器上运行它,因为页面会超时。

我浏览了网页,发现了多种方法 - AJAX,线程,网络服务......(我没有遇到任何经验)

处理此问题的最佳做法是什么?

谢谢。

3 个答案:

答案 0 :(得分:8)

如果您只是尝试执行长时间运行的任务,Windows服务就是完美的。不,不是网络服务,而是老式的Windows服务。当有人上传Excel时,您的Windows服务可以使用FileWatcher监视目录,然后自动执行导入过程。这样,您就不会将您的进程限制为ASP.NET和IIS工作进程,这些进程可以出于各种原因进行回收。听起来你的应用程序确实需要在IIS之外。上载过程可以是一个简单的Web前端,用于将该文件放入由Windows服务监视的目录中。

答案 1 :(得分:4)

一种透明可靠的方法是将所需的任务与处理队列一起实现为WebService。因此,在客户端,您可以简单地向webserver发送请求,接收一些id作为回报,以便稍后检查结果。

其他一切都取决于您尝试实施的丰富用户体验。您只需按一下按钮即可让用户随时刷新控件或整个页面。或者实现基于ajax的控件,该控件可以不时地发送请求并检查结果。

答案 2 :(得分:1)

根据您的要求,您可以设置一个WebService(或者,更准确地说,WCF service,因为不推荐使用常规XML Web服务),如pukipuki所述。

如果长时间运行的过程很复杂(许多步骤,非常密集,可能会将其他东西放到其他服务器上)或需要强大(作业可能会失败并需要重试等),您可能希望考虑使用某种形式的消息队列来控制流入和流出执行长时间运行流程的服务。消息队列在某些情况下肯定是矫枉过正,但它也是一个很好的框架,它提供了消息存储,持久性和流量控制,因此您不必自己构建它。 Here非常好地概述了如何在ASP.NET中使用MSMQ(对不起,示例代码似乎是VB而不是C#)。