代码之家  ›  专栏  ›  技术社区  ›  DevelopingChris

为什么我的asp.net应用程序抛出ThreadAbortException?

  •  21
  • DevelopingChris  · 技术社区  · 17 年前

    这是一个不言自明的问题:

    为什么它在我的日志中出现了数百次?

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

    5 回复  |  直到 6 年前
        1
  •  20
  •   Eric Z Beard    17 年前

    这可能来自一个响应。重定向调用。请查看此链接以获取解释:

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

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

        2
  •  7
  •   rjzii    15 年前

    ThreadAbortException最常见的原因是调用 Response.End, Response.Redirect, or Server.Transfer . 微软已经发布了一些建议的函数,这些函数应该被用来代替那些函数。

        3
  •  1
  •   Jon Sagara    14 年前

    正如其他人所说,它在调用Response.End()时发生(在调用Response.Redirect时发生,而不将false作为第二个参数传递)。这是工作的设计;通常,如果调用Response.Redirect,您希望立即执行重定向。有关更多信息,请参见此:

    Response.Redirect and the ThreadAbortException

        4
  •  0
  •   Community Mohan Dere    9 年前

    知道(至少)有三个API在内部使用 Thread.Abort ,我想用更实际的术语回答,如何解决这个问题。

    对我们来说,这个错误突然开始被记录下来。什么改变了?我们修复了一些处理站点地图的数据库过程中的错误。

    log4net日志显示,X-Forwarded-For头(我们支持NLB)是Google机器人的IP地址66.249.78.X,这支持了我关于站点地图更改的理论,导致Google更积极地抓取我们的站点以寻找图像。

    第一件事是找出为什么只有谷歌机器人才能引起这个问题。没有其他客户端触发任何代码路径使用的内容 Response.Redirect

    那么在 HttpApplication.Error 在处理程序中,我添加了一些代码来记录所有标题和 HttpResponse HttpContext 喷到原木上。

    private void CheckIPhoneAccess() { ... }
    

    它使用重定向。

    怎么办?

    嗯,对于这个陈旧的代码库,不值得对所有的代码进行复古修补 响应,重定向 调用,因此我将降低 ThreadAbortException

    我将改变谷歌机器人移动爬虫的行为,这将 导致我们的网站为手机服务的“谎言”,因为它只在第一次点击时重定向,随后它读取cookie并显示图像。谷歌机器人似乎并没有缓存那个cookie。

    它并不完美,但该网站将重建。可能是另一个团队使用Scala或其他东西,所以从实际角度来说,我认为这是一个不错的选择。我将添加评论,稍后可能会重新讨论这个问题,构建一个 Response.SafeRedirect

    Why Response.Redirect causes System.Threading.ThreadAbortException?

    卢克

        5
  •  0
  •   ValidfroM    12 年前