Исключение возникает следующим образом: System.Runtime.InteropServices.COMException: 'The RPC server is unavailable
Использование EF Для регистрации исключения выглядит так:
LogRecord.LogMessage = Message;
db.SaveChanges();
Когда SaveChanges запущен, он ничего не регистрирует, и IDE переходит к исключению и выделяет его. Любое другое исключение, которое приложение регистрирует правильно, а затем завершает работу, как и предполагалось.
Что-нибудь известно о Interopservices.COMExceptions и EF?
Метод ведения журнала с использованием EF работает безупречно. Это как раз тот особый тип исключения.
Итак, давайте рассмотрим довольно простой пример регистратора базы данных и, в частности, помощника журнала:
public static void UpdateExecutionLog(int Id, string Message)
{
using (var db = new LoggerAutomationEntities())
{
var LogRecord = db.LogsTable.Find(ExecutionId);
LogRecord.LogMessage = Message;
db.SaveChanges();
}
}
Итак, мы видим, что мы пытаемся обновить запись в журнале.
Класс logger и создание объекта кажутся неважными при рассмотрении объема вопроса, поэтому позвольте мне теперь перейти к тому, что нас здесь привело:
CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs args)
{
//call to write to the log
}
Таким образом, любое необработанное исключение заканчивается здесь.
Теперь, исключение приведения, исключение деления на ноль и т. Д. Все обрабатываются таким образом и регистрируются соответствующим образом. Однако любое исключение COMException создает проблему.
Проходя во время преднамеренно вызванного COMException, я вижу, что все эти строки нажаты:
using (var db = new LoggerAutomationEntities())
{
var LogRecord = db.LogsTable.Find(ExecutionId);
LogRecord.LogMessage = Message;
db.SaveChanges();
}
Однако после выхода из среды IDE выделяется и открывается исключение, как если бы обработка журналов никогда не происходила, и запись журнала никогда не попадает в базу данных. Это привело меня к выводу, что что-то с COMExceptions является уникальным, я просто не уверен, что.