收集SQL数据与反馈到asp.net Web应用程序

时间:2009-06-18 06:58:04

标签: asp.net sql sql-server

我有以下情况:我有一个存储过程从一堆表中获取数据并在单个表中创建记录。之后,最终用户可以根据结果表中行的数据获取一些图形。问题是从多个表中收集数据到最终表中可能会有很长的运行时间。我希望从我的Web应用程序中为用户提供启动此数据集合的可能性,并在完成此操作后通知他,以便他可以根据生成的数据访问图形图表。我的问题是如何将其作为最佳实践来实现。

2 个答案:

答案 0 :(得分:1)

在服务器上启动后台线程以进行处理。您可以将处理结果存储在session state,数据库或其他位置。

在客户端,使用UpdatePanel和计时器定期轮询服务器以获得结果。当结果出现时,请禁用计时器。

答案 1 :(得分:0)

我会像Andomar建议的那样,但是在Windows服务中而不是asp.net进程中的线程。

首先,我会在我的数据库中设置一个用作工作队列的表 - 也许你的结果表就足够了?此表将包含作业唯一ID,作业说明(由您的服务用于确定要执行的操作)和作业状态代码(新的,工作的,已完成的)。

然后我会设置一个Windows服务应用程序,它会定期轮询这个表。也许通常每隔5-30秒进行一次,具体取决于您的负载。服务很简单:如果找到任何新工作,它会将第一个工作标记为“正常工作”,然后运行数据收集流程。完成该过程后,该服务会将该作业标记为已完成。

最后,在我的asp.net应用程序中,我将设置一个作业订单页面,用户可以在其中请求新的数据收集作业。该请求将在工作队列表中插入一条新记录,状态为new,并根据需要输入作业描述。然后页面会将用户重定向到新页面(或使用ajax),该页面将检查作业的状态并每隔XX秒重新加载一次以检查作业是否完成。当作业状态代码设置为“完成”时,我们会显示用户可以显示报告或下载文件的页面。

我在此建议的是基于轮询的作业队列的简单实现。当然,您可以使用MSMQ或类似的东西制作一个更好的版本,但这应该足以满足许多情况(如果不是大多数情况)。