4

我们的一个应用程序具有一种机制,可以在遇到一定程度的异常时自动向我们的帮助台发送电子邮件。一个特殊的异常 NullReferenceException 引起了一些问题,我相信它是由 IIS 回收和丢失会话引起的。为了证明这一点,我想记录应用程序何时启动/停止/回收,并在 global.asax 文件中添加了一些代码来执行此操作。在调试模式下运行,日志消息被写出,一切看起来都很好。当我切换到发布构建时,问题就出现了,这会触发 Web 部署项目构建到 IIS 中配置的文件夹。

当我导航到应用程序时,未调用 ApplicationStart 方法,因为未创建日志文件并且未更新事件日志。当我重新启动 IIS 时,ApplicationEnd 也会发生同样的情况,即不会创建日志。

为什么它适用于调试版本而不是发布版本?我已经玩了好几个小时了,这让我发疯了。

提前致谢

**[编辑]:我不是 100% 确定发生了什么,但它现在似乎正在工作。我想也许我们用于记录的程序集在 ApplicationStart 执行时可能没有加载,所以我删除了所有代码,只是在方法中创建了一个文本文件。看哪,文件已创建!所以我添加了一个 if(logger != null) 类型检查来尝试输出一些诊断信息,但没有写出任何内容。所以我尝试了 try/catch 并写了一个空白文件“exception.txt”,如果抛出异常但仍然没有创建文件 - 尽管生成了事件日志和预期的日志文件!我很困惑!**

4

5 回答 5

13

我们遇到了这个问题,解决方案是缺少PrecompiledApp.config文件。如果没有它,global.asax 事件不会在 IIS6 下使用 ISAPI 过滤器触发,并且rewritten.aspx方法记录在 blog.codeville.net 上。我们在部署之前使用 msbuild 预编译站点。

当我们的构建停止工作时,我们在这个问题上摸索了几个小时。原来,在强迫性的管家模式下,我已经从源代码管理中删除了这个文件,因为我认为它是多余的。重新添加它可以解决问题。

于 2009-05-13T11:07:23.550 回答
6

如果您要发布应用程序,请检查PrecompiledApp.config文件。如果您从已发布的站点文件夹中删除该文件,事件将停止触发。

于 2009-05-01T11:20:06.827 回答
1

我会确保在记录空引用异常时记录逻辑没有遇到某种权限问题。您是否具有访问正在写入日志的位置的适当权限?

于 2009-05-01T11:18:39.700 回答
0

如果您需要避开PrecompiledApp文件并发布Global.asax,请转到发布并移动到底部的设置选项卡并取消选中发布期间的预编译

爱的形象会帮助你 在此处输入图像描述

于 2015-10-05T06:21:52.790 回答
0

我们尝试了很多东西。

  1. Global.asax 未发布且事件未在 Global.asax 中触发
  2. 为什么 Global.asax 事件没有在我的 ASP .NET 网站中触发?
  3. global.asax 在本地计算机上工作,但在我发布到服务器后不起作用
  4. ASP.NET MVC 应用程序中的 Global.asax 之谜

我们还尝试将以下文件放入rootbin目录中。

  1. App_global.asax.dllApp_global.asax.compiled文件
  2. 预编译的App.config

都没有用!

为了触发全局事件,对于我们的 asp.net 2.0 网站,我们必须使用 rawGlobal.asax而不是dll。pre-compiled

希望这对某人有帮助!干杯! 快乐编码!:D

于 2015-12-17T11:19:24.823 回答