Есть служба Windows, которая является хостом для WCF-службы. При инициализации службы Windows подписываюсь на событие
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Logger.Error("UNHANDLED", e.ExceptionObject);
}
Периодически служба падает и я могу наблюдать только запись с кодом 7034 в журнале системы о том, что служба неожиданно прервана.
Как узнать что приводит к крашам службы? Весь код реализован через блоки try/catch, с логгированием, но в логах нет ни одного исключения.
UPD
Вывод команды sc query после краша:
SERVICE_NAME: LWPServiceHost
TYPE: 10 WIN32_OWN_PROCESS
STATE: 1 STOPPED
WIN32_EXIT_CODE: 1067 (0x42b)
SERVICE_EXIT_CODE: 0 (0x0)
CHECKPOINT: 0x0
WAIT_HINT: 0x0
В итоге выяснилось, что виной падений является попытка одновременного обращения к COM-компоненту в нескольких потоках (в следствии ошибки в конфигурации WCF-службы). При этом не вырабатывалось исключение, а служба просто завершала свою работу.
При возникновении подобных проблем стоит обратить внимание на системный журнал "Приложение". В нем я нашел события с кодом 1000 по моей службе, где была информация о сбойном модуле.
@Alexander Petrov в комментариях к посту предоставил ссылку на отличную статью, в которой подробно описана обработка исключений в службах Windows.
Спасибо @Alexander Petrov и @MSDN.WhiteKnight за помощь!
Создать отдельный общий класс ошибок типа SamplError
//Чисто для примера взял из головы
class SamplError
{
[DataMember]
public string Reason = "";
public SamplError()
{
}
public SamplError(string error)
{
Reason = error;
}
}
//Добавим проверку на то, что имя уже есть
[DataContract]
class SamplNameExistException : SemplError { }
//Пример вызова
try{}
catch (Exception e)
{
throw new FaultException<SamplNameExistException >(new SamplNameExistException(), e.Message);
}
вот неплохая статья про Ваш случай https://docs.microsoft.com/ru-ru/dotnet/api/system.appdomain.unhandledexception?view=netframework-4.8
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Мне необходимо приложение "WinForm" для переписки в viber"Webhook" планируется для получения данных(событий) из viber, далее полученные данные будут использоваться...
Пытаюсь передать массив Int из C# в C++Выскакивает ошибка:
Не получается решить проблемуУ меня есть TextBlock, который показывает имя файла и расширение