繁体   English   中英

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

[英]Long Running Tasks - Best Practice - ASP.NET 4.0, C#

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

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

处理这个问题的最佳实践方法是什么?

谢谢。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM