ServiceBase.OnStop вызывается, когда происходит сбой службы .Net 2.0? - PullRequest
1 голос
/ 17 декабря 2008

При сбое службы .Net вызывается ли метод ServiceBase.OnStop? Будет ли служба помечена как остановленная независимо от того, вызывается ли метод OnStop или нет?

Ответы [ 3 ]

1 голос
/ 17 декабря 2008

используйте try-catch и вызывайте OnStop самостоятельно; не полагайтесь на «автоматическую остановку», даже если это было «гарантировано», это все равно не очень хорошая идея. Услуги должны быть максимально надежными.

0 голосов
/ 03 февраля 2010

OnStop () вызывается только тогда, когда службе фактически приказано остановиться. Это не включает, например, выключение системы, так как для этого есть отдельный метод для переопределения (называемый OnShutdown()).

Что бы вы ни поместили в OnStop(), скорее всего, это будет только отдельный метод, который можно вызывать как из OnStop(), так и OnShutdown()

Что касается перехвата нечетного неожиданного исключения, я бы предложил заключить вызов ServiceBase.Run() в try / catch с регистрацией в пункте catch. Это должно в значительной степени гарантировать вам регистрацию в случае исключений.

0 голосов
/ 18 декабря 2008

Если под сбоями вы подразумеваете, что в вашем сервисе есть необработанное исключение, то ответ «OnStop» вызываться не будет. В общем, услуга будет помечена как остановленная. Но Стивен прав: у каждого «корневого» метода должен быть блок try-catch, окружающий любой код, который может вызвать исключение, у вашего сервиса никогда не должно быть необработанного исключения.

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