我想知道如何从页面运行存储过程,即使页面关闭也只是“让它完成”。它不需要返回任何数据。
答案 0 :(得分:2)
以数据库为中心的选项是:
根据容量,您可以运行此作业的多个(命名不同的)副本,同时处理列表中的项目。
(我已经将这种方法用于非常长时间运行的方法。它更像是一种管理类型的技巧,但它可能适合你的情况。)
答案 1 :(得分:1)
首先准备命令,然后在线程池中排队。只需确保该线程不依赖于任何HTTP上下文或任何其他http内部对象。如果您的请求在线程之前完成;背景可能已经消失。
答案 2 :(得分:1)
见Asynchronous procedure execution。即使ASP进程崩溃,这也是唯一可以保证执行的方法。它还可以自我调整,可以处理负载峰值,请求排队并在资源可用时进行处理。
解决方案的要点是利用SQL Server Activation概念,它允许您在SQL Server 中的后台线程中运行存储过程而无需客户端连接。
基于SqlClient异步方法或CLR线程池的解决方案是不可靠的,随着ASP进程被回收,调用会丢失,而且它们会构建内存中的请求队列,这些队列实际上会因内存消耗而触发进程回收。
基于表和代理作业的解决方案更好,因为它们可靠,但它们缺乏基于激活的解决方案的自我调整。