我们有一个IIS托管的WCF服务,可以接收大量数据。该服务触发多个工作线程,然后返回离开工作线程完成工作(可能需要一个小时)。如果WCF服务空闲的时间足够长,IIS会回收应用程序池中止工作线程。通过让工作线程偶尔调用虚拟服务来保持应用程序池处于活动状态,已经避免了这个问题。如果您认为整个设置是一个非常糟糕的主意,我完全同意(不是我的代码)。所以无需评论。
问题是我们偶尔会遇到ThreadAbortException。 有没有办法获取有关什么/谁发起线程中止的其他信息?我知道这不是我们的代码。
答案 0 :(得分:0)
IIS日志结果给出了答案。 AFAIK,如果加载了新的二进制文件,IIS等待所有服务调用完成(并且不接受新的调用),然后回收应用程序池。但是,IIs不了解服务后运行的后台线程,因此认为它可以免费回收应用程序池。在某些情况下,我们在后台线程仍在运行时上传了新版本。无论如何,这是一个非常糟糕的架构。