[英]How to use database logging for a WCF Service application using Enterprise Library 6
[英]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.