簡體   English   中英

MSMQ,WCF和Enterprise Library 5記錄應用程序塊

[英]MSMQ, WCF and Enterprise Library 5 Logging application block

背景:我正在使用WCF和MSMQ在服務器上執行長時間運行的作業。 一般錯誤記錄由Enterprise Library 5 Logging Application Block完成。

我的問題是:私有LogWriter _writer = EnterpriseLibraryContainer.Current.GetInstance()一旦從隊列中取出ExecutingMethod()並開始執行,它總是為null,導致不記錄可能的錯誤。

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

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

我已經檢查過執行程序集可以看到日志配置。 我的假設是'序列化類'的序列化可能存在問題?

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

LogWriter類顯然不可序列化。 您從代碼中執行的序列化並不明顯。 實際上,從你的序列化代碼來看並不明顯,所以我猜這里。

無論如何,我不確定你使用的是什么序列化器,但不管它是什么,LogWriter都不會干凈利落地完成它。 .NET序列化程序通常不會重新運行類型的構造函數,因此對於不干凈地反序列化的字段,您可能會像您一樣得到null。

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

-克里斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM