[英]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.