Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
ВнизОбработка исключений в сервисе Найти похожие ветки
← →
ViToTiV (2008-10-29 17:25) [0]Подскажите пжлста, как в сервисном приложении обрабатывать его ишибки/исключения? У меня приложение раньше было обычным, исключения обрабатывал путём:
Application.OnException := MyExceptionHandler;
Но теперь неда это приложение переделать в сервис, а там нет события "Application.OnException" :(
← →
Ega23 © (2008-10-29 17:28) [1]
try
....
except on E : Exception do
Log(.... + E.Message);
end;
← →
ViToTiV (2008-10-29 18:01) [2]Но это тогда каждый раз придётся делать, а на любое исключение, как было у меня "Application.OnException := MyExceptionHandler" нельзя теперь повесить процедуру?
← →
Сергей М. © (2008-10-29 20:15) [3]А нахрен тебе "на любое" ?
Ты свое "лови", а не любое ..
А "любое" ловят батоношлёпы) ..
Ты "батоношлёп" ? Нет ?
Вот и лови "своё".
← →
tesseract © (2008-10-29 20:54) [4]
> как было у меня "Application.OnException := MyExceptionHandler"
> нельзя теперь повесить процедуру?
В delphi к сожалению Assert и отлов не очень развит. Рекомендуеться всё проводить вручную - зато получишь бесценный опыт разработки приложеий 24/7.
← →
Сергей М. © (2008-10-29 22:36) [5]
> tesseract © (29.10.08 20:54) [4]
> Рекомендуеться всё проводить вручную
Чтой-то вас, батенька, к вечеру на "ручное" потянуло ?)
Уж не поссорились ли со спутницей ?)
← →
Slym © (2008-10-30 06:00) [6]Сергей М. © (29.10.08 22:36) [5]
У кого чего болит тот о том и говорит?
← →
Сергей М. © (2008-10-30 08:51) [7]
> ViToTiV (29.10.08 17:25)
Централизованного пользовательского "перехватчика" исключений с возможностью их "гашения" класс TServiceThread не предусматривает.
Придется реализовывать их самостоятельно в каждом из обработчиков событий класса TService.
← →
Slym © (2008-10-30 09:41) [8]Application.OnException - носит сугубо уведомительный характер, и не защищает от последствий...
Сервис-не зависит от пользователя и уведомлять "Нажмите на меня" некого, к томуже сервис - это 24/7/365 приложение и незащищенные от исключений объекты находятся под угрозой с дальнейшим падением сервиса а возможно и всей системы
← →
Сергей М. © (2008-10-30 09:57) [9]
> Slym © (30.10.08 09:41) [8]
Автор, видимо, для протоколирования это надо..
Если так, то и делать ничего не надо - протоколирование непредвиденных исключений в TService и TServiceThread уже предусмотрено
← →
Anatoly Podgoretsky © (2008-10-30 11:09) [10]> Сергей М. (30.10.2008 9:57:09) [9]
Важно, что бы сервис не падал, от некритических исключений.
← →
Сергей М. © (2008-10-30 11:19) [11]
> Anatoly Podgoretsky © (30.10.08 11:09) [10]
Ну это да, само собой разумеется
← →
ViToTiV (2008-10-30 14:43) [12]Мне главное что бы не падал сервис, он выполняет много функций, и если в одной из них произойдёт не предвиденное действие, нужно что бы всё остально работало дальше.
Вообщем я понял, значит придётся везде вручную ловить. Спасибо.
← →
Сергей М. © (2008-10-30 14:52) [13]
> ViToTiV (30.10.08 14:43) [12]
> придётся везде вручную ловить
Зачем везде ?
Вполне достаточно будет в одном месте - обрамить тело цикла в TService.OnExecute в try..except
← →
Slym © (2008-10-31 04:52) [14]Сергей М. © (30.10.08 14:52) [13]
и поймаешь уведомление об ошибке... а саму ошибку уже поздно исправлять, а они имеют свойство накапливаться (например открытые хендлы) и при достижении определенного порога все ляжет...
Ошибку ловить и исправлять или устранять ее последствия нужно по месту там где еще известно по какому поводу шухер
← →
Сергей М. © (2008-10-31 08:42) [15]
> и поймаешь уведомление об ошибке
Чтой-то вдруг ?
В очередной итерации я схлопотал исключение, тут же поймал его, проанализировал (если таковое возможно - а почему бы и нет ?) его причину и возможные последствия и тут же принял решение: выходить ли из цикла, возобновить ли цикл или рерайзить
Первый вариант ведет к корректному (штатному) завершению сервиса, третий - к аварийному ("падение"), второй - продолжение нормальной работы..
← →
Slym © (2008-10-31 11:44) [16]Сергей М. © (31.10.08 8:42) [15]
если вся работа идет внутри цикла и нет вызовов прочих процедур в которых захватываются ресурсы - то да
а если происходят операции по захвату ресурсов: открытие файлов, подключения к дб, прочие захваты "власти"... то без должной защиты получишь только уведомление об ошибке - выполнение освобождающего ресурсы кода прервалось - сушите весла
← →
Сергей М. © (2008-10-31 11:53) [17]
> Slym © (31.10.08 11:44) [16]
> без должной защиты получишь только уведомление об ошибке
> - выполнение освобождающего ресурсы кода прервалось - сушите
> весла
>
Ну это еще надо постараться, чтобы таким веслом огрести)
То что в действительно критичных к жизнеспособности сервиса точках алгоритма должны быть расставлены местные индивидуальные ловушки исключений - это бесспорно. Но и расставлять их на каждом шагу и по каждому чиху тоже вряд ли оправдано.
← →
Anatoly Podgoretsky © (2008-10-31 12:19) [18]
> Но и расставлять их на каждом шагу и по каждому чиху тоже
> вряд ли оправдано.
Зависит от сервиса, возможно еще и более жестко, если сервис должен выживать при любых ситуациях, кроме отсутствие критически важно внешнего ресурса, да и это тоже должен выдерживать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c