2009-11-25 4 views
0

Info 터미널을 구현해야합니다. 나는 dot.net을 선택하고 터미널은 단지 터치 패드입니다. 따라서이 시스템은 7 일 24 시간 가동됩니다.장기 실행 앱, 오류 처리 방법

그래서 웹 서비스를 호출하고 데이터를 표시하고 웹 사이트를 표시합니다. 많은 일이 잘못 될 수 있습니다.

이 시나리오에 대한 권장 사항이 있습니까? try의 모든 기능을 잡을 수 있습니까? AppDomain.CurrentDomain.UnhandledException 이벤트?

감사합니다. Andreas

답변

2

기본적으로 가능한 한 빨리 모든 오류를 처리해야합니다. 따라서 웹 서비스를 호출하면 try/catch 블록에서 모든 호출을 감싸고 거기에서 오류를 처리합니다. 예를 들어, 정확한 오류, 더 많은 일반적인 webservice 관련 예외를 집계, DataSourceFaultException (예를 들어, 이름입니다)은 UI에서 수신하고 UI는 쉽게 결정할 수 있으며 통신에 실패하여 요청한 정보를 표시 할 수 없습니다. 다시 시도하거나 사용자에게 알리거나 다른 작업을 수행하도록 선택하십시오.

그러나 장기 실행 응용 프로그램을 사용하면 더 많은 오류가 발생할 수 있습니다. 대다수는 예측하기 쉽지 않습니다. 특정 호출과 관련이 없기 때문에 메모리가 부족할 수 있습니다. 재귀가 스택 오버플로를 유발할 수 있으며, 시스템 타이머가 최대 값에 도달 할 수 있고 처음부터 시작할 수 있습니다.

모든 방법에서 이러한 오류를 처리하면 안됩니다. 코드 가독성이 떨어지며 오류가 발생하기 쉽습니다. 이러한 오류는 UnhandledException 이벤트에서 가장 잘 처리됩니다. 그러나 예외가 UnhandledException 이벤트에 도달하면 응용 프로그램 상태에 대해 아무 것도 생각할 수 없다는 점을 기억해야합니다. 오류로 인해 일부 또는 전체 내부 상태가 손상되었을 수 있습니다. 따라서 이러한 상황이 발생하면 오류 로그를 작성하고 응용 프로그램을 기꺼이 다시 시작해야합니다 (전체 응용 프로그램이 아닌 응용 프로그램의 상태를 다시 초기화 할 수 있습니다. 그렇다면 유효한 옵션이기도합니다). 오류로 인해 복구 할 수 없으며 이러한 상황을 처리 할 수 ​​없음을 알고 있습니다.

+0

의견을 보내 주셔서 감사합니다. "응용 프로그램의 상태를 다시 초기화하십시오"라고 말하면 응용 프로그램을 다시 시작 하시겠습니까? –

+0

반드시 그렇지는 않지만 가장 안전한 방법입니다. 전체 응용 프로그램을 다시 시작하지 않고 상태를 다시 초기화 할 수는 있지만 매우주의해야합니다. – maciejkow

+0

그것은 다음과 같이 말할 수 있습니다. = new myForm(); –

0

에 달려 있습니다.

함수 내에서 예외를 적절히 처리 할 수 ​​있다면 처리하십시오. 그렇지 않은 경우 사용자에게 알리거나 기록하기 위해 전역 예외 처리기를 만듭니다.

관련 문제