2015-09-26 63 views
2
  • 我有一个ASP.NET MVC 5应用
  • 该应用程序使用日志记录应用程序块和异常应用程序块
  • 在生产环境中,我发现多次出现以下错误信息发生:

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)EnterpriseLibrary 6错误:无法访问已释放的对象(对象名称:“Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter”)

的错误似乎当存在失败的SE异步请求发生rver。当服务器试图处理这个错误时,ExceptionHandling应用程序块失败。

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

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

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

+0

看来,如果我实例化LogWriter一次,然后实例化ExceptionManager(它使用已存在的LogWriter实例),然后再次实例化LogWriter,会发生这种情况。在此之后,下一次使用ExceptionPolicy.HandleException。我有这个错误可能是因为ExceptionManager仍然挂钩到LogWriter的一个不存在的实例 – Dragos

回答

1

最后,任何人谁遇到这个问题,在我的情况,这是因为在应用程序的某些部分,还有的写进程

另一个实例
Logger.SetLogWriter(new LogWriterFactory().Create(), false); 

因为我有一些用于日志记录和异常处理的静态助手,我初始化了日志记录器和异常管理器,每当应用程序使用时发生异常,异常管理器需要处理异常,第二次手动实例化之后,异常者仍然被“挂钩”在记录员的一个实例上,该实例不再存在

1

这个例外是不言而喻的 - 当调用Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter时,它先前在代码中处理过。所以,你应该寻找的东西,像Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.Dispose()或最终using (Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter) { }

+0

不幸的是,我已经做了这个检查。我没有做任何手动配置,也没有在LogWriter或任何其他EntLib对象中使用任何语句 – Dragos

+0

而且,如果这是原因,我不会不时遇到这个问题,我会一直有它并不难复制它...我只需要运行该应用程序 – Dragos

相关问题