【发布时间】:2013-04-16 11:37:11
【问题描述】:
处理需要很长时间执行的流程的推荐方法是什么?我不想简单地在服务器上运行它,因为页面会超时。
我浏览了网络并找到了多种方法 - AJAX、线程、Web 服务......(我没有经验)
处理这个问题的最佳实践方法是什么?
谢谢。
【问题讨论】:
标签: c# asp.net ajax web-services
处理需要很长时间执行的流程的推荐方法是什么?我不想简单地在服务器上运行它,因为页面会超时。
我浏览了网络并找到了多种方法 - AJAX、线程、Web 服务......(我没有经验)
处理这个问题的最佳实践方法是什么?
谢谢。
【问题讨论】:
标签: c# asp.net ajax web-services
如果您只是想执行一项长时间运行的任务,那么 Windows 服务非常适合。不,不是 Web 服务,而是老式的 Windows 服务。当有人上传 Excel 时,您的 Windows 服务可以使用 FileWatcher 监视目录,然后自动执行导入过程。这样,您就不会将进程限制为 ASP.NET 和 IIS Worker 进程,它们可以出于多种原因被回收。听起来您的应用程序确实需要在 IIS 之外。上传过程可以是一个简单的 Web 前端,用于将该文件放入您的 Windows 服务监控的目录中。
【讨论】:
一种透明且可靠的方法是将所需任务与处理队列一起实现为 WebService。因此,在客户端,您可以简单地向网络服务器发送请求,接收一些 id 作为回报,以便稍后检查结果。
其他一切都取决于您尝试实现的丰富用户体验。您可以简单地让用户通过按下按钮不时刷新控件或整个页面。或者实现基于 ajax 的控件,它自己不时发送请求并检查结果。
【讨论】:
根据您的要求,您可以设置一个 WebService(或者更准确地说,一个 WCF service,因为不推荐使用常规 XML WebServices),就像 pukipuki 提到的那样。
如果长时间运行的过程很复杂(步骤很多、非常密集、可能会被转移到其他服务器)或需要稳健(作业可能会失败并需要重试等),您可能想要研究使用某种形式的消息队列来控制进出执行长时间运行过程的服务的流量。消息队列在某些情况下肯定是多余的,但它也是一个很好的框架,提供消息存储、持久性和流控制,因此您不必自己构建它。 Here 很好地概述了如何将 MSMQ 与 ASP.NET 一起使用(对不起,示例代码似乎是 VB 而不是 C#)。
【讨论】: