.Net Windows Service выдает EventType clr20r3 system.data.sqlclient.sql ошибка - PullRequest
3 голосов
/ 29 апреля 2010

У меня есть служба Windows .Net / c # 2.0. Точка входа обернута в блок try catch, который уведомляет меня о проблемах и позволяет службе продолжать работу в обычном режиме, но когда я просматриваю журнал событий приложения сервера, я вижу ряд ошибок «EventType clr20r3», которые приводят к смерти службы неожиданно. Блок catch имеет «catch (Exception ex)» и не перебрасывает исключение.

Каждая команда sql имеет тип «CommandType.StoredProcedure» и выполняется с SqlDataReader's. Эти вызовы sproc работают правильно 99% времени, и все они были тщательно протестированы, профилированы и проверены. Я дополнительно упаковал эти вызовы в блоки try catch, чтобы быть уверенным, и все еще испытываю эти необработанные исключения.

Это только в нашей производственной среде и не может быть продублировано в наших средах разработки или подготовки (даже при большой нагрузке).

Почему моя обработка ошибок не уловила эту конкретную ошибку? Есть ли способ уловить больше деталей относительно первопричины проблемы?

Вот пример журнала событий:

EventType clr20r3, P1 RDC.OrderProcessorService, 
P2 1.0.0.0, 
P3 4ae6a0d0, 
P4 system.data, 
P5 2.0.0.0, P6 4889deaf, 
P7 2490, 
P8 2c, 
P9 system.data.sqlclient.sql, 
P10 NIL.

Дополнительно

The Order Processor service terminated unexpectedly.  
It has done this 1 time(s).  
The following corrective action will be taken in 60000 milliseconds: 
Restart the service.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2010

Ответ из комментариев. Рад, что помог. :)

Вы пытались добавить Событие AppDomain.UnhandledException обработчик? msdn.microsoft.com/en-us/library/... Проблема в том, что у вас есть необработанное исключение SQL где-то в ваш код.

Не обязательно, но не видя ваш код или библиотеки вы используя, нет никакого способа узнать, если исключение происходит в другом нить, в сторонней библиотеке и т.д ... Путем подключения Обработчик AppDomain.UnhandledException, Вы должны хотя бы в состоянии войти подробности исключения и выяснить, где ваша проблема в том, Просто брось EventArg to ((Исключение) e.ExceptionObject) .message и ты должен хотя бы лучше Идея, где ваше необработанное исключение есть.

1 голос
/ 29 апреля 2010

Эта ошибка, скорее всего, происходит в потоке, отличном от вашей точки входа.

Вам также необходимо как-то определить обработку исключений для фоновых потоков.

Если вы используете WCF для упаковки службы, у вас есть возможность определить, как обрабатываются сбои и другие исключения. Это ваш хостинг?

РЕДАКТИРОВАТЬ: Если вы не создаете ничего асинхронно, и это не приложение WCF / etc, попробуйте обработать исключение AppDomain.UnhandledException и зарегистрировать там подробную ошибку.

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