0

我们有一个 IIS 托管的 WCF 服务,它接收大量数据以进行处理。该服务启动几个工作线程,然后返回离开工作线程以完成工作(这可能需要一个小时)。如果 WCF 服务空闲足够长的时间,IIS 会回收应用程序池中止工作线程。这个问题已经通过让工作线程偶尔调用一个虚拟服务来让应用程序池保持活动状态而被规避。如果您认为整个设置是一个非常糟糕的主意,我完全同意(不是我的代码)。所以没必要评论。

问题是我们仍然偶尔会遇到 ThreadAbortException。有什么方法可以获取有关什么/谁启动线程中止的其他信息?我知道这不是我们的代码。

4

1 回答 1

0

IIS 日志结果给出了答案。AFAIK,如果加载了新的二进制文件,IIS 将等待所有服务调用完成(并且不接受新调用),然后回收应用程序池。但是,IIs 不知道服务后运行的后台线程,因此认为它可以免费回收应用程序池。在某些情况下,我们会在后台线程仍在运行时上传新版本。无论如何,这是一个非常糟糕的架构。

于 2014-12-16T06:36:45.277 回答