2010-08-23 145 views
0

我想知道从ASP.NET网页按需启动处理长时间运行进程的最佳方式。处理ASP.NET中长时间运行的进程

的过程可以包括的各个步骤(如文件上传到服务器,在上面运行SSIS包,执行一些存储过程等),有时这个过程可能需要长达几个小时才能完成。

如果我使用WCF服务去异步执行,那么如果用户关闭,而进程正在运行,过程如何成功或失败的结果应该显示给用户浏览器中会发生什么?为了解决这个问题,我选择了单向的WCF服务调用,但问题在于我需要创建一个进程表并存储结果(如果在任何步骤中失败并且哪些步骤已成功完成,则存储错误消息)该表是额外的开销,因为有许多这样的进程具有用户可以从网页调用的各种步骤,并且用户需要知道进度(在最简单的情况下,状态可以是“进程xyz运行”)一旦完成,输出需要显示给用户(例如通过运行存储过程)。

什么是设计这个解决方案的最佳方式是什么?

回答

2

在我看来,你有三种选择

  1. 有一个长期运行的页面,用户等待为回应。如果这是几个小时,你会遇到很多可用性问题,所以我甚至不会考虑它。
  2. 创建一个进程表来存储操作结果。异步运行服务功能并将结果记录到服务中。可以有一个用户刷新的页面,获取此表的最新结果。
  3. 如果您确实不想创建表格,则将所有当前进程的详细信息存储在用户的会话状态中,并具有上述的当前进程页面。您可能会遇到会话可能超时的问题,或者Web应用程序可能会重新启动,您将失去所有这些。

我看不出2号这么大的困难。您可以使表格具有相当的通用性,以涵盖所有类型的进程:进程细节可以被编码为二进制或XML,并由Web应用程序解释。然后你有最强大的解决方案。

+0

感谢所有的答复。我需要构建的东西更像是一个小型工作执行管理工具,由Web界面触发,这不是很常见。我可能会创建一个通用的进程表并将日志消息存储为xml。日志消息主要表示执行进度。 – RKP 2010-08-24 11:28:35

1

我不能说最好的办法是什么,但使用的是Windows Workflow Foundation的这样的长时间运行的进程肯定是去了解它的一种方式。

你可以做的过程中追踪,看看它是在哪个阶段,甚至坚持,如果你有在那里等待用户输入步骤等

WF提供了很多功能开箱即用(尤其是如果您的存储介质是SQL Server)并且可能是一个不错的选择。

http://www.codeproject.com/KB/WF/WF4Extensions.aspx可能有助于给你一些更深入地了解一样。

1

我认为你是在正确的轨道上。您应该异步运行该进程,将执行存储在某处(表),并将运行进程的状态保存在那里。

您的用户应该看到一个未决显示标签,而进程正在执行,以及一个完成标签,其结果当进程结束。如果用户关闭浏览器时,她会看到她正在运行的进程的结果,下一次她登录英寸

相关问题