EnterpriseLibrary 6 error: Cannot access a disposed object (Object name: 'Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter')

EnterpriseLibrary 6 error: Cannot access a disposed object (Object name: 'Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter')

Cannot access a disposed object. Object name: 'Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter'. at Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.ExecuteReadOperation(Action readOperation) at Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.Write(LogEntry log) at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler.WriteToLog(String logMessage, IDictionary exceptionData) at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler.HandleException(Exception exception, Guid handlingInstanceId) at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyEntry.ExecuteHandlerChain(Exception ex, Guid handlingInstanceID)

当服务器上有一个失败的异步请求时,似乎会发生错误。当服务器尝试处理此错误时,ExceptionHandling 应用程序块失败。

我的问题当然是我不明白这个错误的原因,但最让我烦恼的是我无法复制错误。

我已尝试重新初始化 AppDomain(通过 web.config)、回收应用程序池、在发送 ajax 请求之前重新启动 IIS 服务器。我还创建了一个 LogWriterWrapper 单例来设置 LogWriter 实例,但行为是相同的。有时,尝试处理异常时的错误仍然发生。

不知道有没有关系,好像只有客户端是ie8/ie9才会出现这个错误。例如,使用 chrome 时从未发生过,但我想这可能只是偶然发生的......

异常是不言自明的 - 当调用 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter 时,它先前已在代码中的某处处理。所以你应该搜索 Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.Dispose() 或最终 using (Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter) { }

最后,对于遇到此问题的任何人,在我的情况下,这是因为在应用程序的某些部分中,存在 LogWriter 的另一个实例

Logger.SetLogWriter(new LogWriterFactory().Create(), false);

因为我有一些用于日志记录和异常处理的静态帮助程序,我在其中初始化了 logwriter 和 exceptionmanager,每当应用程序使用期间发生异常时,需要由 exceptionmanager 处理,在第二次手动实例化之后运行,exceptionamanger 仍然 "hooked" 在不再存在的 logwriter 实例上