在发出HTTP Get Request时线程中止

时间:2015-04-27 20:32:19

标签: c# .net threadabortexception

最近我开始使用以下堆栈跟踪接收警报:

  

消息:线程正在中止。

     

堆栈跟踪:在System.Net.Connection.CompleteStartConnection(布尔值   async,HttpWebRequest httpWebRequest)at   System.Net.Connection.CompleteStartRequest(Boolean onSubmitThread,   HttpWebRequest请求,TriState needReConnect)   System.Net.Connection.SubmitRequest(HttpWebRequest请求,布尔值   forcesubmit)在System.Net.ServicePoint.SubmitRequest(HttpWebRequest   request,String connName)at   System.Net.HttpWebRequest.SubmitRequest(ServicePoint servicePoint)at   System.Net.HttpWebRequest.GetResponse()at   已移除以保护身份

在我看来,在与远程服务器建立实际连接之前,线程已中止。真的吗?为什么会出现这种情况 - 试图缩小问题范围。

我尝试在System.Net.Connection.CompleteStartConnection方法上查找文档但无法找到任何内容。有什么想法吗?

更新:添加调用代码的结构以响应注释。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = method; request.ContentType = "application/xml";
request.Headers.Add("Foo", "Bar");
request.Proxy = new System.Net.WebProxy(proxyAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

更新2:此警报仅偶尔发生几分钟然后消失。

更新3:我还没有提供的重要信息 - 我在UPDATE 1中显示的代码片段正由计时器上的任务调用。

2 个答案:

答案 0 :(得分:0)

之前我已经处理过这个问题,通常这表明通过客户端或服务本身调用服务的代码正在调用Thread.Abort()(这是不好的做法,但用于缓解连接可以在服务器上保持打开的事实)。服务调用中的ThreadAbortExceptions主要发生在明确告知线程中止时。

我应该补充一点,如果服务器正在中止该线程,您通常会将其作为SoapException取回。因此,请检查代码库中Thread.Abort()

的用法

答案 1 :(得分:0)

非常感谢@Moby Disk和@Scott Chamberlain帮助我解决这个问题。

导致此问题的原因是托管我已编写的代码的应用程序池有一个回收设置,常规时间间隔(分钟)设置为 1740 分钟,相当于 29 小时(默认值)。

每当工作线程在这样的循环中运行时,我会看到错误(因为它会收到一个它没有处理的ThreadAbort异常)。 修复设置解决了问题。