.net 使用HttpWebRequest.GetResponse()时,什么可能导致ThreadAbortException
由于这种情况,我生活在噩梦中,我有一个HttpWebRequest.GetResponse,它不断给我一个ThreadAbortException,这会导致整个应用程序崩溃 在这种情况下,使用Thread.ResetAbort()会有用吗?我如何避免,或者至少处理它 下面是一个粗略的代码示例,以进一步说明:.net 使用HttpWebRequest.GetResponse()时,什么可能导致ThreadAbortException,.net,.net,由于这种情况,我生活在噩梦中,我有一个HttpWebRequest.GetResponse,它不断给我一个ThreadAbortException,这会导致整个应用程序崩溃 在这种情况下,使用Thread.ResetAbort()会有用吗?我如何避免,或者至少处理它 下面是一个粗略的代码示例,以进一步说明: HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://someurl.com/"); HttpWebResponse
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://someurl.com/");
HttpWebResponse resp = req.GetResponse();
现在,上面的最后一行抛出了ThreadAbortException,这可能是因为请求超时,这很好,但我不想在我的ASP.NET 2.0应用程序中获得ThreadAbortException,因为它会杀死它。ThreadAborException无法通过try/catch捕获,处理它的唯一方法是使用Thread.ResetAbort(),它也有它自己的不良影响,它将使线程保持活动状态,并且只有天知道会持续多长时间。我在使用Response时遇到了这个问题。查看本文,了解一些解决方法 还可以在WebException和备注部分查看此MSDN文档
可以捕获此异常。。。如果您在检测正确的异常时遇到问题,您应该尝试捕获一个常规异常(system.exception),然后堆栈跟踪将告诉您实际捕获的特定类型(HttpException、WebException等) 我们的应用程序始终抛出线程异常 重定向(“url”)调用。应用程序从未关闭,很可能b/c异常在某个点被捕获并保持活动状态
顺便说一句,Response.Redirect(“url”,false)将防止响应因异常而终止。Andrew的帖子链接到响应类不同用途的类似解决方法。我已经看到Andrew和“ForCripesSake”列出的两个问题 ThreadAbortException的另一种可能性是在服务器端的页面请求生命周期之外运行的任何代码,例如HttpModule和HttpHandler。模块或处理程序中引发的任何异常都不会进入ASP.Net中默认的未处理异常机制,并可能导致线程死亡 根据本文所述,在ASP.net或CLR中,有几个异常通常不容易处理: 不确定它是否适用于您在问题中列出的客户机代码,但它可能是相关的
希望有帮助 从您所说的来看,您似乎是在处理ASP.NET应用程序的传入请求时向外部资源发出传出WebRequest。这里有(至少)两个相关的超时:
- 超时(默认10000ms=100s)指定执行传出WebRequest的超时时间。如果这个超时过期,你应该得到一个WebException,所以这不是你的问题
- 处理传入请求的HttpRuntime有一个执行超时:对于.NET 2.0或更高版本,默认值为110s;对于.NET 1.x,默认值为90s。当此超时过期时,您将获得ThreadAbortException。看起来这就是正在发生的事情
- 减少传出请求的WebRequest.Timeout,并处理WebException,或
- 如果传出请求真的需要那么长的时间,则增加httpRuntime执行超时,如中所述