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

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

我浏览了网页,发现了多种方法–AJAX,线程,Web服务……(我没有经验)

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

谢谢。

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

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

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

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

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