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

C# 调用任务的方法退出后,如何使任务保持活动状态?,c#,multithreading,web-services,task-parallel-library,asp.net-web-api,C#,Multithreading,Web Services,Task Parallel Library,Asp.net Web Api,我正在编写一个Web服务,它通过一个存储过程将一个长时间运行的批量插入命令发送到sql db。我不希望Web服务在等待db的响应时挂起,因此我只想返回一个http响应,让客户端知道在我启动任务后请求已发送到db。但是,一旦我返回响应,任务就会失去上下文,变得一团糟,对吗?我应该如何保持它的活力?一般来说,从IIS派生一些工作不是一个好主意。如果AppPool重新启动会发生什么?如果出现异常,会发生什么情况 相反,我建议编写一个Windows服务并让它负责这项工作 根据您的意见,我想知道您是否可以

我正在编写一个Web服务,它通过一个存储过程将一个长时间运行的批量插入命令发送到sql db。我不希望Web服务在等待db的响应时挂起,因此我只想返回一个http响应,让客户端知道在我启动任务后请求已发送到db。但是,一旦我返回响应,任务就会失去上下文,变得一团糟,对吗?我应该如何保持它的活力?

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

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

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

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

一个单独的windows服务用于长时间运行的进程,该进程还将使用web服务使用的相同数据访问程序集


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

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

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

本文建议如何在webservice中执行回调契约


希望这有帮助

不幸的是,有人告诉我,所有的交流都必须通过网络服务。我无法与db进行任何直接通信。顺便说一句,你们都很聪明,而且都是正确的。@WillMartin浏览web服务很好。让Web服务接收请求,将其交给Windows服务,然后让它在那里处理。不过,Windows服务仍然需要打开sql连接并调用存储的进程,对吗?它仍然是通过Web服务调用与数据库的直接通信,无法正常工作。您遇到了第22个难题。长DB呼叫(在我看来)应该永远不要通过IIS,这是自找麻烦。但是您似乎需要强制所有DB调用(内部和外部)通过webservice?就我个人而言,我认为这是一个考虑不周的要求。