浏览器关闭后继续执行存储过程
本文关键字:执行 存储过程 继续 浏览器 | 更新日期: 2023-09-27 18:12:01
我有一个发送电子邮件到20k的存储过程,我从一个. net网页调用它,它将参数传递给它。这需要一些时间来发送,如果页面关闭,则发送停止。
我想把参数传递给过程,并让它运行直到完成。
创建一个SSIS包并从网页启动是最好的方法吗?如果是,我可以将参数传递给包并关闭浏览器吗?
我猜调用SSIS包仍然是同步的。您需要将它们解耦,并让它们异步运行。
这看起来像是Windows服务的一个很好的候选者。你的网页可以设置一个标志来驱动服务的控制逻辑。
否则,只需设置一个Sql代理作业,在给定的时间间隔内轮询数据库,并在设置标志时开始发送电子邮件。当然,还可以设置网页上的标志。
可以通过创建具有SSIS执行步骤的SqlAgent作业并使用sp_start_job来异步启动具有存储过程的SSIS作业。SSIS:通过存储过程执行包更详细地介绍了这个选项。如果采用这种方法,我不会尝试将参数直接传递给作业(我所知道的唯一方法是动态创建作业)。相反,我将简单地将一些值插入到数据库队列表中,并使用一个包来处理该队列。
你也可能对某些框架(如Hangfire)感兴趣,这些框架允许在asp.net中运行后台任务。
石英。. NET是另一个流行的后台作业框架。
Scott Hanselman在《如何在asp.net中运行后台任务》一文中介绍了这些选项(并且一定要注意asp.net后台任务可能失败的方式,例如应用程序池回收)
但是,无论采用何种方法,都不应该假定作业成功完成——换句话说,您需要维护某种类型的外发邮件队列,以便在发生故障时重试。