我们的某个应用程序有一种机制,可以在遇到特定级别的异常时自动通过电子邮件发送帮助台。一个特殊的例外,一个NullReferenceException,导致一些问题,我相信它是由IIS回收和丢失会话引起的。 为了证明这一点,我想在应用程序启动/停止/回收时记录,并在global.asax文件中添加了一些代码来执行此操作。在调试模式下运行时,日志消息被写出并且一切都很好。当我切换到Release build时会出现问题,它会触发Web部署项目构建到IIS中配置的文件夹。
当我导航到应用程序时,未调用ApplicationStart方法,因为未创建日志文件且未更新事件日志。当我重新启动IIS时,ApplicationEnd也会发生同样的情况,即不会创建日志。
为什么它适用于Debug版本但不适用于Release版本?我一直在踢这几个小时,这让我疯狂。
提前致谢
** [编辑]:我不是100%确定发生了什么,但它现在似乎正在发挥作用。我想也许我们用于日志记录的程序集可能在ApplicationStart执行时没有加载,所以我删除了所有代码,只是在方法中创建了一个文本文件。看哪,文件已经创建了!所以我添加了一个if(logger!= null)类型检查以尝试输出一些诊断但没有写出任何内容。所以我尝试了一个try / catch并写了一个空白文件“exception.txt”,如果抛出异常但仍然没有创建文件 - 尽管生成了事件日志和预期的日志文件!我糊涂了! **
答案 0 :(得分:11)
我们遇到了这个问题,并且缺少 PrecompiledApp.config 文件是解决方案。如果没有它,global.asax事件不会在IIS6下使用ISAPI过滤器触发,并且 rewritten.aspx 方法记录为例如在blog.codeville.net上。我们使用msbuild在部署之前预编译站点。
当我们的构建停止工作时,我们在这个问题上抓了几个小时。事实上,在强迫性的管家模式中,我已经从源代码控制中删除了这个文件,因为我认为它是多余的。添加它以修复问题。
答案 1 :(得分:5)
如果要发布应用,请检查 PrecompiledApp.config 文件。如果从发布的站点文件夹中删除该文件,则事件将停止触发。
答案 2 :(得分:1)
我会确保在记录空引用异常时,日志记录逻辑没有遇到某种权限问题。您是否具有approprite权限来访问日志的写入位置?
答案 3 :(得分:0)
答案 4 :(得分:0)
我们尝试了很多东西。
我们还尝试将以下文件放在root
和bin
目录中。
没有一个有效!
我们必须为我们的asp .net 2.0网站提供原始Global.asax
而不是pre-compiled
dll,以便触发全局事件。
希望这有助于某人!干杯!快乐的编码! :d