2011-05-12 198 views
0

背景:我正在使用WCF和MSMQ在服務器上執行長時間運行的作業。一般錯誤記錄由企業庫5日誌記錄應用程序塊完成。MSMQ,WCF和企業庫5日誌記錄應用程序塊

我的問題是這樣的: 私人日誌寫_writer = EnterpriseLibraryContainer.Current.GetInstance()總是空一旦ExecutingMethod()已經從隊列中被拾取起來並開始執行,導致無法登錄可能出現的錯誤。

public class SerializedClass 
{ 
    private LogWriter _writer = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>(); 

    public void ExecutingMethod() 
    { 
     try 
     { 
      ..... 
     } 
     catch(Exception ex) 
     { 
      _writer.Write(ex, Category.General, Priority.Highest); 
     } 
    } 
} 

我已經檢查過日誌配置對執行程序集是可見的。我的假設是,序列化'SerializedClass'可能存在問題?

任何幫助或輸入將不勝感激?

回答

2

LogWriter類顯式不可序列化。你在代碼中做什麼序列化並不明顯。事實上,從你正在序列化的代碼中並不明顯,所以我在這裏猜測。

無論如何,我不確定你使用的是什麼序列化器,但無論它是什麼,LogWriter都不會乾淨地通過它。 .NET序列化程序通常不會重新運行類型的構造函數,因此對於不會乾淨地反序列化的字段,您可能會像您一樣得到空值。

解決方法很簡單 - 直到實際需要時才抓取LogWriter。抓住它的catch塊,而不是將其存儲在構造函數中。在這種情況下,使用舊的靜態外觀可能會更容易,只需調用Logger.Write()而不是通過特定的LogWriter實例。

-Chris

相關問題