2009-11-25 2 views
0

Мне нужно реализовать информационный терминал. Я выбираю dot.net, а терминал - только тачпад. Итак, эта система работает 7 дней 24 часа.Долгое приложение, как справляться с ошибками?

Так что я называю веб-сервис, отображаю данные, показываю материал сайта. Многое может пойти не так.

У вас есть рекомендации по этому сценарию? Каждая функция в попытке поймать? Событие AppDomain.CurrentDomain.UnhandledException?

Thanks Andreas

ответ

2

В принципе, вы должны обрабатывать любую ошибку, как только это возможно - поэтому, если вы вызываете webservice, переносите все вызовы в блок try/catch и обрабатываете ошибку там - вы можете, например, записать точный ошибка, совокупность многих связанных с webservice исключений в более общем виде, DataSourceFaultException (например, имя), которое затем будет получено UI, и пользовательский интерфейс сможет легко определить, что он не может отображать запрошенную информацию, поскольку связь не удалась, и повторите попытку, уведомите пользователя или сделайте что-нибудь еще.

Однако - с длинным запуском приложения есть еще много ошибок, с которыми вам придется иметь дело. Многие из них непросто предсказать, поскольку они не обязательно связаны с каким-либо конкретным вызовом - вы можете исчерпать память, рекурсия может привести к переполнению стека, системный таймер может достичь максимального значения и начать с начала и т. Д.

Вы не должны обрабатывать эти ошибки в каждом методе, так как это будет только ухудшать код и будет подвержено ошибкам. Эти ошибки лучше всего обрабатывать с помощью события UnhandledException. Тем не менее, вы должны помнить, что, когда исключение достигает события UnhandledException, вы не можете предполагать ничего о состоянии вашего приложения - ошибка может привести к повреждению некоторого (или даже всего) внутреннего состояния. Поэтому, когда возникает такое условие, лучше всего попытаться создать журнал ошибок и изящно перезапустить приложение (не обязательно все приложение - возможно, будет возможно повторно инициализировать состояние приложения - если это так, это также действительный вариант. осознавая, что вы не сможете восстановить некоторые ошибки и в любом случае справиться с такой ситуацией).

+0

спасибо за ваш комментарий, вы пишете «повторно инициализировать состояние приложения», это означает перезапустить приложение? –

+0

Не обязательно, но это самый безопасный подход. Вы можете попытаться повторно инициализировать состояние без перезапуска всего приложения, но вам нужно быть очень осторожным с этим. – maciejkow

+0

это позволяет сказать это = new myForm(); –

0

Это зависит.

Если вы можете обработать соответствующее исключение внутри функции - обработайте ее. Если нет - создайте глобальный обработчик исключений, чтобы информировать пользователя или регистрировать его.

Смежные вопросы