我想知道处理ASP.NET网页上按需启动的长时间运行进程的最佳方法。
该过程可能包含各种步骤(例如将文件上传到服务器,在其上运行SSIS包,执行一些存储过程等),有时这个过程可能需要几个小时才能完成。
如果我使用WCF服务进行异步执行,那么如果用户在进程运行时关闭浏览器会发生什么情况,应该如何向用户显示进程成功或失败结果?为了解决这个问题,我选择了单向WCF服务调用,但问题是我需要创建一个进程表并存储结果(如果在任何步骤中失败并且哪些步骤已成功完成,则存储错误消息)该表是一个额外的开销,因为有许多这样的进程具有用户可以从网页调用的各种步骤,并且用户需要知道进度(在最简单的情况下,状态可以是“进程xyz运行”)一旦完成,就需要向用户显示输出(例如,通过运行存储过程)。
为此设计解决方案的最佳方法是什么?
答案 0 :(得分:2)
在我看来,你有三个选择
我看不出2号是如此艰难。您可以使表格相当通用以包含所有类型的进程:进程详细信息可以编码为二进制或xml并由Web应用程序解释。然后,您就拥有了最强大的解决方案。
答案 1 :(得分:1)
我不能说最好的方法是什么,但使用Windows Workflow Foundation进行如此长时间运行的过程绝对是一种方法。
您可以跟踪流程以查看流程,甚至在您有等待用户输入的步骤等时保留它。
WF提供了许多开箱即用的功能(特别是如果您的存储介质是SQL Server),可能是一个很好的选择。
http://www.codeproject.com/KB/WF/WF4Extensions.aspx可能有助于您更深入地了解相同内容。
答案 2 :(得分:1)
我认为你走在正确的轨道上。您应该异步运行该进程,将 execution 存储在某个地方(表),并保持正在运行的进程的状态。
您的用户应在流程执行时看到待处理显示标签,并在流程结束时看到已完成的标签。如果用户关闭了浏览器,她将在下次登录时看到其运行过程的结果。