1

我在一个相当大的网站上工作。我们目前有 4 个 Web 服务器和一个使用 C# 运行 ASP.NET 2.0 的主动被动数据库集群。目前我们的异常处理没有捕获正确的异常抛出。我听说这是因为Server.GetLastError()它不是线程安全的(注意:我们目前不使用Server.GetLastError().GetBaseException()这可能是我们没有得到正确错误的原因)。

我们正在启动一个捕获确切异常的项目,因此我们实际上可以看到错误的根本原因,我正在尝试找到最好的方法来做到这一点。

我们的选择是:

  • 遍历我们所有的类/方法(数百个,如果不是数千个)添加 try/catch/finally 块以捕获正确的异常。
  • 找出一种方法来正确处理 global.asax 中的异常。

所以我想我的问题是:

  • Server.GetLastError()线程安全吗?
  • 如果同时抛出两个异常,是否都会被记录?
  • 有没有比我列出的更好的方法来处理这个问题?
4

2 回答 2

1

我相信您根本不应该更改初始应用程序。您应该在 web.config 中创建并注册一个 IHttpModule,该 IHttpModule 挂钩 Error 事件以递归记录抛出的异常及其内部异常。

延伸阅读

于 2009-01-14T18:05:23.513 回答
0

你应该看看Steven A. Lowe 的 CALM产品。

这是一个非常好的“插件”解决方案。

(免责声明:我是 beta 测试者之一)

于 2009-01-14T18:00:19.873 回答