2013-03-20 163 views
1

经过多年的节目,我需要为第一次做一些事情异步(因为它需要几分钟,网页超时 - 不想让用户等待那么久呢)。这项行动仅由少数人完成,但可以每天进行几次(对于他们每个人)。异步处理.NET SQL Server?

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

所以..

  1. 如何我(希望简单)让这个异步,使用户可以与其他的东西得到?

  2. 如果有这样的建立在.NET一侧或SQL一边?

  3. 有没有办法(几分钟后),用户可以知道这个过程已经完成并成功?也许是电子邮件?不知道用户怎么知道它完成了。

我读了这个网站一些关于它的线程,但如果使用Visual Studio 2012多现在不同了/ .NET框架4.5(我们仍然在使用SQL Server 2008 R2),他们从2009年所以不知道。

+0

读入使用AJAX和可能的Web方法 - 你的情况听起来非常理想... – sgeddes 2013-03-20 23:37:46

+0

不一定。如果用户导航离开,则没有机制可以查看结果或检查错误。 – 2013-03-20 23:38:31

回答

1

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

我建议写请求到数据库表中,使用一个单独的Windows服务做了长时间运行的工作。它可以更新,可以在以后的时间进行检查,看是否该任务完成与否的数据库表中的状态栏,如果有错误。

0

你可以在SQL端使用服务代理;它是一个消息队列的SQL Server实现。 好的例子herehere

你要做的是创建一个Service Broker服务并定义一些脚手架(队列,消息类型等)。 然后创建一个服务“激活”过程,它基本上是一个存储过程从队列中消费消息。这个SP会收到一个表格中带有记录ID的消息,然后继续进行下去并做任何需要做的事情,或者在完成后发送邮件等。

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

Service Broker的好处是消息传递几乎得到保证 - 即使SQL Server崩溃该消息被排队之后,当你把它备份激活SP只会再次揭开序幕,所以这是非常强大的。