2013-09-29 2 views
2

ASP.NET 및 WCF (IErrorHandler)에서 전역 예외 처리기 (Application_Error/Page_Error)의 사용과 관련하여 몇 가지 기본적인 의문점이 있습니다.글로벌 예외 처리기는 불필요한 try catch 블록 제거를 의미합니까?

위의 항목 중 하나를 사용하면 모든 예외 사항이 통과되며 내 의지에 따라 기록하고 매핑 할 수 있습니까? 또한 불필요한 try catch 블록을 모두 제거하고 필요할 때마다 try 블록으로 대체하는 것을 권장합니까?

'불필요한'은 결국 중복되는 블록을 잡아 당기는 것을 의미합니다. 예 : 내가 모든 DB 예외를 잡아서 wcf의 특정 FaultException으로 변환하고 현재 ProvideFault 메소드에서 동일한 변환을 수행하고 있다면, 클라이언트가 FaultException을 작성하는 것만으로 그 catch 블록을 제거하면 안된다. 세부?

+3

아니요 ... 그냥 없습니다. :: shiver :: –

+3

try catch 블록은 프로그램이 정상적으로 작동하지 않거나 예기치 않은 동작이나 결과를 초래할 수있는 오류를 정상적으로 처리 할 수 ​​있도록하기 위해 존재합니다. ** ** 처리되지 않은 예외를 catch하는 전역 오류 처리기에 의존하는 것은 나쁜 설계 방식입니다. 잘 설계된 프로그램은 알려진 조건 **을 처리 할 catch 블록을 시도하고 예상치 못한 상황을 잡는 글로벌 처리기를 모두 갖습니다. – Tim

+0

팀의 의견이 답이되어야합니다. 그것은 당신이 필요로하는 것입니다 - 즉각적이고 정확하게 말입니다. – Olexander

답변

1

예, 오류를 전체적으로 기록 할 수 있지만 페이지에서 오류 처리를 수행 할 필요가 없습니다 (메모, StackOverflowException 같은 일부 오류는 잡히지 않습니다). 전역 수준에서 기록되는 유일한 오류는 예기치 않은 것이므로 try/catch를 사용하지 않아야합니다. 이유에 대한 간단한 예제는 다음과 같습니다.

숫자를 입력하도록 요청합니다. 입력을 int로 파싱합니다. 그들은 문자열을 입력했습니다. 이 오류를 전역 수준에서 기록 하시겠습니까? 아닙니다. 사용자는이를 파악하고 오류를 표시하고 싶을 것입니다.

또한 NuGet for Elmah를 검색하여 효과가 있는지 확인하십시오. 5 분 안에 오류 처리.

+0

WCF는 어떨까요? 나는 try catch 블록의 사용을 최소화 할 수 있다고 생각한다. – techknowfreak

+1

팀이 말한 바. 전역 수준에서 기록되는 유일한 오류는 예기치 않은 오류입니다. 당신이 결코 다시 시도 잡으려고 사용하지 않는 방법. – MikeSmithDev