2009-10-05 3 views
5

코드를 ASMX에서 WCF로 변환 중입니다.WCF 서비스에는 어떤 예외 유형을 던져야합니까?

if (ex.InnerException != null) 
       { 
        SoapException se = new SoapException(ex.Message, SoapException.ServerFaultCode, Context.Request.Url.AbsoluteUri, ex.InnerException); 
        throw se; 
       } 

예외 어떤 종류의 내 서비스를 호출 WCF 클라이언트에 다시 던져해야 내 ASMX 웹 서비스에서 나는 다시 같은 SOAP 예외를 던져? 테스트 클라이언트가 올바른 오류로 볼 수 없으며 단지 - 내부 오류가 웹 서비스에서 발생했기 때문에 SOAP exceptin이 잘못된 종류라고 추측합니다.

답변

20

기본적으로 WCF 서비스에서는 FaultException (또는 FaultException<T>) 만 던질 때 가장 유용합니다.

이것은 두 가지 때문입니다. WCF가 상호 운용 가능하도록 설계 되었기 때문에 (클라이언트가 쉽게 비.NET 패키지 일 수 있기 때문에) .NET 예외는 사용하지 않아야합니다. 플랫폼에 따라 너무 다릅니다. 두 가지 : FaultExceptions (SOAP 오류로 변환 됨)를 사용하면 채널 (클라이언트와 서버 간의 연결)이 해체되거나 "오류"되지 않습니다. 서버 측의 WCF 런타임은 처리되지 않은 모든 .NET 예외를 "심각한"예외로 취급하므로 실제로 잘못된 것이 발생한 것으로 가정하면 오류가 발생한 상태가됩니다.

채널에 결함이있는 경우 더 이상 사용할 수 없습니다. 클라이언트 프록시를 닫고 처음부터 다시 만들어야합니다.

당신이 원하는 (또는에있는) 매우 상호 운용 될 경우에, 당신은 당신의 SOAP 오류가 오류가 별도의 파일에 (데이터 계약과 유사) 계약입니다 정의 것이며, T가 될 경우 당신은 FaultException<T>를 던질 것 네 잘못 계약 중 하나야. 만약 당신이 엄격하게 .NET을 사용하고 있다면, .NET 예외를 FaultException에 붙일 수 있습니다. 원하는 경우 - 채널에 오류가 없을 것입니다 (예 : FaultException<InvalidOperationException>을 던져서 잘못된).

+1

큰 설명, 나는 두 번 upvote 수 있으면 좋겠다. 감사. – Noich

3

WCF에서는 FaultException을 사용합니다. 예를 들어 here을 참조하십시오.

+0

멋진 예제 공유. – SBirthare