EnterpriseLibrary 6错误:无法访问已释放的对象(对象名称:';Microsoft.Practic

本文关键字:对象 Practic Microsoft 错误 访问 释放 EnterpriseLibrary | 更新日期: 2023-09-27 18:14:48

  • 我有一个ASP.NET MVC 5应用程序
  • 该应用程序使用日志应用程序块和异常应用程序块
  • 在生产环境中,我发现以下错误消息多次出现:

无法访问已释放的对象。对象名称:"Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter"。位于Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.ExecuteReadOperation(操作readOperation(位于Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.Write(LogEntry日志(位于Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.LoggingExceptionHandler.WriteToLog(字符串logMessage,IDictionary exceptionData(位于Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.LoggingExceptionHandler.HandleException(异常异常,Guid handlingInstanceId(位于Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyEntry.ExecuteHandlerChain(异常例如,Guid处理实例ID(

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

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

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

我不知道它是否有关联,但似乎只有当客户端是ie8/ie9时才会出现这个错误。例如,当铬被使用时,它从未发生过,但我想这可能只是偶然的。。。

EnterpriseLibrary 6错误:无法访问已释放的对象(对象名称:';Microsoft.Practic

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

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

因为我有一些用于日志记录和异常处理的静态助手,在那里我初始化了logwriter和exceptionmanager,每当应用程序使用过程中发生异常时,需要由exceptionmanager处理,在第二个手动实例化已经运行后,exceptionamanager仍然"挂"在一个不再存在的日志写入程序实例上

异常是不言自明的——当调用Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter时,它以前在代码中的某个地方被处理过。因此,您应该搜索类似Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.Dispose()或最终using (Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter) { }