MSMQ, WCF и Enterprise Library 5 Блок приложения для ведения журнала - PullRequest
0 голосов
/ 12 мая 2011

Справочная информация: я использую WCF и MSMQ для выполнения длительных заданий на сервере.Общая регистрация ошибок ведется с помощью Enterprise Library 5. Ведение журнала приложения.

Моя проблема заключается в следующем: private LogWriter _writer = EnterpriseLibraryContainer.Current.GetInstance () всегда равен нулю после того, как ExecutingMethod () был получен из очередии начинает выполнение, в результате чего не регистрируются возможные ошибки.

 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'?

Любая помощь или вклад будут оценены?

1 Ответ

2 голосов
/ 16 мая 2011

Класс LogWriter явно не сериализуем.Не очевидно, какую сериализацию вы делаете из кода.На самом деле, это не совсем очевидно из кода, который вы сериализуете, поэтому я предполагаю здесь.

В любом случае, я не уверен, какой сериализатор вы используете, но как бы то ни было, LogWriter НЕ БУДЕТпройти через это чисто.Сериализаторы .NET обычно не перезапускают конструкторы для типов, поэтому для полей, которые не десериализованы чисто, вы, вероятно, получите нулевое значение, как и вы.

Обойти это просто - не надовозьмите LogWriter, пока он вам действительно не понадобится.Захватите его в блоке catch вместо сохранения в конструкторе.В этом случае, вероятно, будет проще использовать более старые статические фасады вместо этого и просто вызвать Logger.Write () вместо того, чтобы проходить через конкретный экземпляр LogWriter.

-Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...