【发布时间】:2017-09-10 17:43:14
【问题描述】:
我有一个 ASP.NET Web 应用程序,它需要提交一个带有参数的长时间运行的 SQL 存储过程。它可以运行长达 30 分钟。如何提交以作为作业在 sql server 上运行,以便 Web 应用程序可以继续执行其他操作?是否可以从 ASP.NET 检查作业是否已完成?
【问题讨论】:
-
您可以使用异步方法和 await 关键字。
-
我一般会创建一个backgroundworker,将sql i放入backgroundworker中。带有 SQL.CMD 的 SQL Server 命令,它是对数据库的命令行查询。我经常创建一个进程来运行 SQL.CMD 并将结果放入 csv 文件中。然后稍后将 csv 文件读入 c#。 SQL.CMD 比通过 c# 接口运行查询更高效。
-
了解 Quartz.NET 或 HangFire
-
我认为作为 sql 作业运行会更好,因为即使用户关闭浏览器或应用程序池被回收,它也会继续运行。
-
一个可能的解决方案是查看QueueBackgroundWorkItem 虽然在 IIS 中长时间运行的任务由于 AppPool 回收而存在问题。
标签: c# asp.net sql-server tsql