线程在wcf服务中中止了异常

shi*_*mar 17 c# wcf thread-abort threadabortexception

我有一个托管在IIS 6.0上的WCF服务(内置于.NET framework 3.5).

代码流程如下

  1. 客户端(这是另一个Web服务)调用WCF服务
  2. WCF服务调用一个线程在后台进行处理并立即响应被调用者.
  3. 完成所有处理后的后台线程,回调线程.此调用基本上是HTTPs请求,因为客户端是Web服务.

我正在加载测试我的WCF服务以定义阈值.观察结果如下:

在1分钟内对WCF服务进行的大约3次迭代的1024次请求成功通过.完成每次迭代所需的时间约为25-30分钟.但是从第4次迭代可以看到批量故障.大约50%的请求因以下异常而失败.

异常 - 线程正在中止.

堆栈跟踪

21_10_2016_09_30_52,9:30:52 AM,Information,Thread name- apSwTTbLTETfwT3y Stack trace in ProcessTestConversion method -    at System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
   at System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
   at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
   at System.Net.LazyAsyncResult.WaitForCompletion(Boolean snap)
   at System.Net.Connection.SubmitRequest(HttpWebRequest request, Boolean forcedsubmit)
   at System.Net.ServicePoint.SubmitRequest(HttpWebRequest request, String connName)
   at System.Net.HttpWebRequest.SubmitRequest(ServicePoint servicePoint)
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   .
   .(My function calls stack trace)
   .
   .
Run Code Online (Sandbox Code Playgroud)

我试图解决这些问题的变化如下:

   <behavior>
    <serviceThrottling maxConcurrentCalls="2000"
                                 maxConcurrentInstances ="2400"
                                 maxConcurrentSessions ="400"/>
    </behavior>
Run Code Online (Sandbox Code Playgroud)

在web.config中

<system.web>
        <compilation debug="false" />
        <httpRuntime executionTimeout="1800"/>
    </system.web>
Run Code Online (Sandbox Code Playgroud)

在web.config中

  <system.net>
        <connectionManagement>
          <add address = "*" maxconnection = "100" />
        </connectionManagement>
      </system.net>
Run Code Online (Sandbox Code Playgroud)

在web.config中

ServicePointManager.DefaultConnectionLimit = 100; (Change in code)
Run Code Online (Sandbox Code Playgroud)

我已经按照StackOverflow上的许多人的建议将App池的IdleTimeout属性设置为0.

无论在哪里使用溪流,我都会处理所有地方.所以所有的流都关闭了.

任何人都可以告诉我谁在中止线程以及为什么有任何手段或工具来跟踪线程中止启动的原因?

Gee*_*eek 5

我遇到过这个问题,它归结为对客户端类的不当使用。

发生的事情是当一个客户端类被实例化时,它不会释放资源,导致吞吐量降低。会发生一个非常无用的异常“线程正在中止”。这是通过创建一个辅助类来解决的,该类通用地创建了一个客户端对象,然后正确实现了构造函数和处理方法。

一些 IIS 异常对问题的实际原因不是很有帮助或真实,但要深入了解为解决我的问题所做的工作是查看 IIS 日志。特别是“失败的请求跟踪规则

希望这会有所帮助,我能理解您的挫败感,这是一个令人头疼的问题。