背景:我正在使用WCF和MSMQ在服务器上执行长时间运行的作业。一般错误记录由Enterprise Library 5 Logging Application Block完成。
我的问题是: 一旦ExecutingMethod()从队列中取出并开始执行,私有LogWriter _writer = EnterpriseLibraryContainer.Current.GetInstance()始终为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);
}
}
}
我已经检查过执行程序集可以看到日志记录配置。我的假设是'SerializedClass'的序列化可能存在问题?
任何帮助或意见都会受到赞赏吗?
答案 0 :(得分:2)
LogWriter类显然不可序列化。您从代码中执行的序列化并不明显。实际上,从你的序列化代码来看并不明显,所以我猜这里。
无论如何,我不确定你使用的是什么序列化器,但不管它是什么,LogWriter都不会干净利落地完成它。 .NET序列化程序通常不会重新运行类型的构造函数,因此对于不干净地反序列化的字段,您可能会像您一样得到null。
解决方法很简单 - 在实际需要之前不要抓取LogWriter。抓住它,而不是将它存储在构造函数中。在这种情况下,使用旧的静态外观可能更容易,只需调用Logger.Write()而不是通过特定的LogWriter实例。
-Chris