在调用任务的方法退出后,如何使任务保持活动状态

本文关键字:任务 何使 活动状态 调用 方法 退出 | 更新日期: 2023-09-27 17:58:53

我正在编写一个Web服务,它通过存储的proc将一个长时间运行的大容量插入命令丢弃到sqldb中。我不希望Web服务在等待数据库的响应时挂断,所以我只想返回一个http响应,让客户端在我启动任务后知道请求已发送到数据库。但一旦我返回响应,任务就会失去上下文并被破坏,对吧?我该如何让它活着?

在调用任务的方法退出后,如何使任务保持活动状态

一般来说,从IIS派生一些东西来做工作不是一个好主意。如果AppPool重新启动会发生什么?如果出现异常,会发生什么?

相反,我建议编写一个Windows服务并让它负责这项工作。

根据您的意见,我想看看您是否可以要求以下要求(理论上):

所有外部调用都是通过web服务完成的。web服务使用单独的程序集进行实际的数据访问。

单独的windows服务用于长时间运行的进程,这些进程也将使用web服务使用的相同数据访问程序集。

这确实是最好的方法(但根据需求不一定可行)。

我认为这更像是一个架构问题,而不仅仅是维护"上下文"。说到体系结构,我认为WCF Web服务在您的场景中会有所帮助。

您需要的是一个带有回调合约的服务。服务接收请求,返回ack,存储客户端上下文(用于回调),并在后台触发长时间运行的数据库任务。当任务完成时,它读取客户端上下文并调用带有结果的回调处理程序。

MSDN上的这篇文章建议如何在webservice中执行回调合约。

希望这能有所帮助!