关于多线程:为什么我的asp.net应用程序抛出ThreadAbortException?

关于多线程:为什么我的asp.net应用程序抛出ThreadAbortException?

Why is my asp.net application throwing ThreadAbortException?

自我解释的问题。

即使什么都没错,为什么这东西会冒充我的尝试者呢?

为什么它会在我的日志中显示数百次?

我知道这是一个有关newb的问题,但是如果该网站要获得搜索排名并吸引newb,我们必须问他们


这可能来自Response.Redirect调用。检查此链接以获取说明:

http://dotnet.org.za/armand/archive/2004/11/16/7088.aspx

(在大多数情况下,调用Response.Redirect(url,false)可解决此问题)


ThreadAbortException的最常见原因是调用Response.End,Response.Redirect或Server.Transfer。 Microsoft已发布一些建议的功能,而不是这些功能。


就像其他人所说的那样,它在您调用Response.End()时发生(在您调用Response.Redirect而不传递false作为第二个参数时发生)。这是按设计工作的;通常,如果调用Response.Redirect,则希望立即进行重定向。请参阅此以获取更多信息:

Response.Redirect和ThreadAbortException


之所以Response.Redirect会给出此异常,是因为ASP.NET在内部使用Thread.Abort()实现了此API。调用此方法时,将引发特殊的ThreadAbortException。此异常不会被任何catch块吞没。它会在每个catch块的末尾重新抛出。


知道至少有三个内部使用Thread.Abort的API之后,我想以更实际的方式回答如何解决该问题。

对于我们而言,此错误开始突然记录下来。发生了什么变化?我们修复了一些处理站点地图的数据库过程中的错误。

log4net日志显示X-Forwarded-For标头(我们位于NLB后面)是Googlebot的IP地址66.249.78.x,这支持了我关于站点地图更改的理论,导致Google更加抓取我们的网站来寻找图像。

首先是要找出为什么只有Googlebot才能够导致此问题。没有其他客户端触发任何使用Response.Redirect的代码路径。

因此,在HttpApplication.Error处理程序中,我添加了一些代码来记录所有标头的额外详细输出,并且将HttpResponseHttpContext中的大多数数据喷射到日志中。

这让我看到问题是Googlebot使用的是iPhone用户代理字符串,并以此为准,因此我能够在代码库中搜索" iPhone"并提出:

1
private void CheckIPhoneAccess() { ... }

并且使用重定向。

怎么办呢?

好了,对于这个老化的代码库,不值得对所有Response.Redirect调用进行修补,因此,我将降低应用程序ThreadAbortException的日志记录级别。

我将更改Googlebot移动抓取工具的行为,这不会导致我们的网站向移动设备提供服务的"谎言",因为它只会在第一次点击时重定向,随后会读取Cookie并显示图片。 Googlebot似乎没有缓存该Cookie。

它不是完美的,但是该站点将被重建。可能是由另一个使用Scala或其他工具的团队组成的,因此从实际角度来说,我认为这是一个不错的选择。我将添加评论,以后可能会再次访问该问题,构建一个Response.SafeRedirect扩展,其中封装了以下建议:

为什么Response.Redirect导致System.Threading.ThreadAbortException?

卢克


推荐阅读

    未知软件异常应用程序错误解决方案

    未知软件异常应用程序错误解决方案,,我有很多朋友的电脑未知软件异常应用程序错误的问题,对于异常未知的软件异常中的应用一般提示(0xc00000

    小米手机安装的应用程序包在哪里

    小米手机安装的应用程序包在哪里,,问题: 下载小米手机系统的安装文件在哪里 答案uff1a 下载应用程序包位置:SD卡>下载。 (摘自:小米手册:米

    多线程cpu电脑|多线程的CPU

    多线程cpu电脑|多线程的CPU,,1. 多线程的CPU四核心四线程,表示这个电脑的CPU核心是4个核心、4个线程的。电脑CPU的核心数量和线程数量越多,

    开启电脑debug日志|打开debug

    开启电脑debug日志|打开debug,,1. 打开debug1、在黑屏状态是无法打开USB开关的。如果手机出现黑屏情况,建议长按电源键(部分机器需同时按住

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法

    如何查看与分析IIS服务器日志

    如何查看与分析IIS服务器日志,日志,网站,本文目录如何查看与分析IIS服务器日志什么是网站日志分析需要分析哪些内容如何查看服务器日志如