Web服务中的ThreadPool.QueueUserWorkItem用于“消除和忘记”任务

这是ASP.NET ASMX Web服务/ .NET Framework 4.0。

在Web服务中,我想在另一个线程上执行一个类似“Fire and Forget”的方法,以便Web Service立即返回一些值以响应网站。 在Web服务立即向Web站点返回响应之后,另一个线程上的该方法可能需要10分钟。 另外,我不需要该方法的返回值。

我已经使用ThreadPool.QueueUserWorkItem测试了这个场景,并且看起来使用ThreadPool开始的线程仍然会继续执行,即使Web服务将响应返回给Web站点。 我在这里纠正? 还有更好的方法来实现这一目标吗?


现在的问题是,ASP.NET会回收应用程序池。 因为它不知道你的后台任务,所以它不会被考虑,并且在AppDomain被处置时会被中止。

大多数情况下,这项工作将会完成,但是如果运行时间足够长,您将遇到这种情况。

有两种解决方案:

1)“正确”的方法是编写一个在ASP.NET之外运行的Windows服务。 您可以通过WCF向服务发送说明。

2)“快速和肮脏”的方式是在你的ASP.NET站点编写一个永远不会被用户调用的隐藏的Web服务。 您的应用程序启动对隐藏服务的异步请求,然后将其自己的结果返回给用户,无需等待。

ASP.NET不知道对隐藏服务的请求来自您的应用程序 - 它只是将它视为另一个请求。 因为ASP.NET知道这个请求,所以它在回收时不会中止它。

链接地址: http://www.djcxy.com/p/74501.html

上一篇: ThreadPool.QueueUserWorkItem in Web Service for “Fire and Forget” task

下一篇: Authentication from ASP.NET web app to ASP.NET web service to SQL Server