Asp.net 异步处理.NET SQL Server?

Asp.net 异步处理.NET SQL Server?,asp.net,asynchronous,sql-server-2008-r2,Asp.net,Asynchronous,Sql Server 2008 R2,经过多年的编程,我第一次需要做一些异步的事情(因为这需要几分钟的时间,网页就会超时——反正也不希望用户等待那么久)。这个动作只由少数人完成,但每天可以完成几次(针对每个人) 通过使用LINQ在ASP.NET网页上单击“保存”,我将向SQL Server表中插入一条记录。然后触发SSIS包,将该记录推送到全国其他几个数据库 所以 我如何(希望是简单地)使这个异步化,以便用户可以继续处理其他事情 这应该在.NET端还是SQL端设置 有没有办法(几分钟后)让用户知道流程已经完成并成功?也许是一封电子邮

经过多年的编程,我第一次需要做一些异步的事情(因为这需要几分钟的时间,网页就会超时——反正也不希望用户等待那么久)。这个动作只由少数人完成,但每天可以完成几次(针对每个人)

通过使用LINQ在ASP.NET网页上单击“保存”,我将向SQL Server表中插入一条记录。然后触发SSIS包,将该记录推送到全国其他几个数据库

所以

  • 我如何(希望是简单地)使这个异步化,以便用户可以继续处理其他事情

  • 这应该在.NET端还是SQL端设置

  • 有没有办法(几分钟后)让用户知道流程已经完成并成功?也许是一封电子邮件?不确定用户如何知道它完成得很好


  • 我在这个网站上读到了一些关于它的帖子,但它们是2009年的,所以不确定现在是否与Visual Studio 2012/.NET Framework 4.5(我们仍在使用SQL Server 2008 R2)有很大不同。

    在ASP.NET中执行长时间运行的任务通常不是一个好主意。首先,如果应用程序池在任务完成之前被回收,它将丢失


    我建议将请求写入数据库表,并使用单独的Windows服务来完成长期运行的工作。它可以更新数据库表中的状态列,以便在以后检查任务是否完成,以及是否有错误。

    在ASP.Net中执行长时间运行的任务通常不是一个好主意。首先,如果应用程序池在任务完成之前被回收,它将丢失


    我建议将请求写入数据库表,并使用单独的Windows服务来完成长期运行的工作。它可以更新数据库表中的状态列,以便稍后检查任务是否完成,以及是否存在错误。

    您可以在SQL端使用Service Broker;它是消息队列的SQLServer实现。 好例子和

    您要做的是创建一个ServiceBroker服务并定义一些脚手架(队列、消息类型等)。 然后创建一个服务“激活”过程,它基本上是一个使用队列中的消息的存储过程。例如,该SP将接收一条带有表中记录ID的消息,然后继续对其执行任何需要执行的操作,可能在完成后发送电子邮件,等等

    因此,您可以从后面的代码调用一个简单的存储过程,将用户的数据插入表中,并向队列发送一条消息,例如新记录的ID,然后立即返回。我想你应该提前告诉用户这可能需要几分钟,他们会收到一封电子邮件,等等


    Service Broker最棒的一点是消息传递几乎是有保证的——即使在消息排队后SQL Server立即崩溃,当您将其恢复时,激活SP将再次启动,因此它非常健壮。

    您可以在SQL端使用Service Broker;它是消息队列的SQLServer实现。 好例子和

    您要做的是创建一个ServiceBroker服务并定义一些脚手架(队列、消息类型等)。 然后创建一个服务“激活”过程,它基本上是一个使用队列中的消息的存储过程。例如,该SP将接收一条带有表中记录ID的消息,然后继续对其执行任何需要执行的操作,可能在完成后发送电子邮件,等等

    因此,您可以从后面的代码调用一个简单的存储过程,将用户的数据插入表中,并向队列发送一条消息,例如新记录的ID,然后立即返回。我想你应该提前告诉用户这可能需要几分钟,他们会收到一封电子邮件,等等


    Service Broker最棒的一点是消息传递几乎是有保证的-即使您的SQL Server在消息排队后立即崩溃,当您将其恢复时,激活SP将再次启动,所以它非常健壮。

    了解使用AJAX和可能的web方法——听起来非常适合您的情况……不一定。如果用户离开了,那么就没有机制可以查看结果或检查错误了。如果用户导航离开,那么就没有机制可以查看结果或检查错误。