2011-12-19 2 views
3

DB와 통신하는 WCF 서비스가 있습니다. 모든 작업이 서비스를 통과합니다. 클라이언트 (이 경우 WPF 응용 프로그램)에 예외를 반환하는 가장 좋은 방법은 무엇입니까?예외 처리 WCF 서비스가있는 WPF 응용 프로그램

고객의 목록을 반환하는 서비스에서 GetCustomer가 있다고 가정 해 보겠습니다. 그러나 이것은 예외가있었습니다. 이 예외를 클라이언트에 어떻게 반환해야합니까?

답변

-1

잠재적 인 예외에 대한 정보를 서비스 계약에 포함시키는 방법 중 하나입니다. 따라서 귀하의 예에서 GetCustomer는 고객 목록을 반환합니다. 또한 발생 된 예외에 대한 잠재적으로 비어있는 데이터 집합을 반환합니다. 이는 서비스의 모든 사용자가 .NET 응용 프로그램이 될 수는 없기 때문에 좋은 생각입니다. .NET 오류를 보내는 것이 현명하지는 않습니다.

+0

-1 : 이것은 좋은 생각이 될 이유를 알려주십시오. –

3

마이크로 소프트는 예외가 발생 될 때 명시 적으로 이 IErrorHandler 인터페이스를 구현하고 ErrorHandlers 속성에 을 추가, 응용 프로그램의 동작을 제어하기 위해 WCF 예외

에 대한 IErrorHandler를 구현하는 것이 좋습니다. IErrorHandler를 사용하면 명시 적으로 SOAP 결함을 제어하고 클라이언트를 으로 다시 보낼지 여부를 결정하고 로깅과 같은 관련 작업을 수행 할 수 있습니다. 오류 핸들러는 ErrorHandlers 속성에 추가 된 순서대로 호출됩니다.

오류 메시지를 제어하기 위해 ProvideFault 메서드를 구현합니다.

는 지금에 응용 프로그램을 종료, 빠른 실패 및 보장, 오류 로깅을 포함하여, 오류 관련 행동을 보장 하기는 handleError 메소드를 구현합니다.

Here는 MSDN

보다 더 나은 샘플
IMyService proxy = ...; //Get proxy from somewhere 
try { 
    proxy.MyMethod(); 
} 
catch (CommunicationException) { ... } 
catch (TimeoutException) { ... } 
catch (FaultException<MyApplicationFault> myFault) { 
    MyApplicationFault detail = myFault.Detail; 
    //Do something with the actual fault 
} 
catch (FaultException otherFault) { ... } 
+0

예제에서이 예외/오류를 클라이언트에 반환하는 방법은 무엇입니까? – VoodooChild

+0

서비스에서 예외를 반환하지 않고 서비스에서 throw합니다. new FaultException (fault); 클라이언트는 위의 코드를 포착합니다. –