2009-06-18 63 views
1

我有以下情况:我有一个存储过程,从一堆表中获取数据并创建一个记录到一个表中。之后,最终用户可以根据生成表格中该行的数据得到一些图形。问题是,从多个表中收集数据到最终的数据可能会有很长的运行时间。我希望从我的Web应用程序中为用户提供开始收集数据的可能性,并且在完成这些工作以告知他这一点时,可以根据所得到的收集数据访问图形图表。我的问题是如何实施这个最佳实践。收集SQL数据与反馈到asp.net web应用程序

回答

1

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

在客户端,使用UpdatePanel和Timer定期轮询服务器的结果。当结果存在时,禁用定时器。

0

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

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

然后,我会设置一个Windows服务应用程序,将定期轮询此表。根据您的负载情况,可能每隔5-30秒钟更换一次。该服务很简单:如果发现任何新作业,它会将第一份工作标记为“正常工作”,然后运行数据收集过程。完成该过程后,该服务会将工作标记为已完成。

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

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