繁体   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