2015-09-26 71 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

相關問題