【问题标题】:More info from ThreadAbortException来自 ThreadAbortException 的更多信息
【发布时间】:2014-12-09 06:57:19
【问题描述】:

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

问题是我们仍然偶尔会遇到 ThreadAbortException。 有什么方法可以获得关于什么/谁发起了线程中止的更多信息?我知道这不是我们的代码。

【问题讨论】:

  • 也许正在查看异常中包含的调用堆栈?
  • 呃,调用堆栈是相当随机的,如果中止是由外部进程启动的,我会预料到。

标签: c# multithreading wcf iis threadabortexception


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2018-05-09
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多