繁体   English   中英

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

[英]How do I keep a task alive after the method that called it has exited?

我正在编写一个web服务,通​​过存储过程将长时间运行的批量插入命令丢弃到sql db。 我不希望web服务在等待来自db的响应时挂起,所以我想返回一个http响应,让客户端知道在我启动任务后请求已经发送到db。 但是一旦我返回响应,任务就会失去上下文并被删除,对吧? 我该如何保持活力?

一般来说,从IIS中分离出一些东西并不是一个好主意。 如果AppPool重新启动会发生什么? 如果有例外,会发生什么?

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

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

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

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

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

我认为这更像是一个架构问题,而不仅仅是维护“上下文”。 谈到架构,我认为WCF webservices会对你的场景有所帮助。

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

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM