收集SQL数据并反馈到asp.net web app

收集SQL数据并反馈到asp.net web app,asp.net,sql,sql-server,Asp.net,Sql,Sql Server,我有以下情况:我有一个存储过程,它从一堆表中获取数据,并将一条记录创建到一个表中。之后,最终用户可以根据结果表中的行中的数据获取一些图形。问题在于,将多个表中的数据收集到生成的表中可能需要很长的运行时间。我想从我的Web应用程序中为用户提供启动此数据收集的可能性,并在完成此操作时通知他,以便他可以根据收集的结果访问图形图表。我的问题是如何将其作为最佳实践来实现。在服务器上启动一个后台线程来进行处理。您可以将处理结果存储在、数据库或其他位置 在客户端,使用和计时器定期轮询服务器以获取结果。当结果出

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

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


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

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


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

我会按照Andomar的建议做一些事情,但是在windows服务中,而不是asp.net进程中的线程中

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

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

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


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

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

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

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

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

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