2008-09-02 3 views
2

내 그룹이 서비스 기반 (.NET WCF) 응용 프로그램을 개발 중이며 내부 서비스에서 예외를 처리하는 방법을 결정하려고합니다. 예외를 던져야할까요? 반환 예외는 XML로 직렬화됩니까? 오류 코드 만 반환합니까?웹 서비스의 예외

사용자는 이러한 예외를 볼 수 없으며 응용 프로그램의 다른 부분에만 해당됩니다.

답변

3

WCF는 서비스에서 클라이언트로 또는 클라이언트에서 서비스로 예외를 전송하는 고유 한 방법으로 SoapFaults를 사용합니다.

당신은 당신의 계약 인터페이스에서 FaultContract 속성을 사용하여 사용자 정의 SOAP 오류를 선언 할 수 있습니다 : 예를 들어

:

[ServiceContract(Namespace="foobar")] 
interface IContract 
{ 
    [OperationContract] 
    [FaultContract(typeof(CustomFault))] 
    void DoSomething(); 
} 


[DataContract(Namespace="Foobar")] 
class CustomFault 
{ 
    [DataMember] 
    public string error; 

    public CustomFault(string err) 
    { 
     error = err; 
    } 
} 

class myService : IContract 
{ 
    public void DoSomething() 
    { 
     throw new FaultException<CustomFault>(new CustomFault("Custom Exception!")); 
    } 
} 
1

약간 혼란 스럽지만, 나는 경박하지 않습니다. XML로 직렬화 된 예외를 반환하고 사용자가 예외를 전혀 보지 않을 것이라고 말합니다. 누가 이러한 예외를 보게 될 것입니까?

일반적으로 WCF 오류 계약을 사용한다고 말하고 싶습니다.

2

음, 표준 SOAPException을 던지지 않는 이유는 무엇입니까? 오류 코드 및 직렬화 된 XML의 문제점은 실제로 오류가 발생했음을 인식하기 위해 추가 논리가 필요하다는 것입니다. 이러한 접근 방식은 웹 서비스의 다른 측면에서 일어날 필요가있는 로깅이나 로직을 전문화 한 경우에만 유용합니다. 이러한 예는 오류 예외 보고서와 함께 "계속 진행합니다."라는 플래그를 반환합니다.

던지는 방법에 관계없이 호출 측에서 예외가 있음을 인식하고 처리해야하므로 작업을 더 쉽게 수행 할 수 없습니다.

0

Phil 필자는 WCF를 사용하여 응용 프로그램의 각기 다른 부분을 호출합니다. "XML로 직렬화 된 반환 예외"는 함수 wold의 반환 값이 예외 객체라는 것을 의미했습니다. 성공은 null로 표시됩니다.

나는 그것이 맞는 선택이라고 생각하지 않습니다.

WCF 오류 계약은 좋지만 나는 그것에 대해 아무것도 모릅니다. 지금 Google 확인 중.

0

나는 것 당신이 괜찮하지 않는 한 직접 클라이언트에 다시 예외를 보내지 않도록 많은 세부 사항이 되돌려 보내집니다.

WCF 결함을 사용하여 오류 메시지 및 코드 (재 시도 또는 오류 등의 결정을 내리는 데 사용할 수있는 무언가)를 송신자 또는 수신자에 따라 전송하는 것이 좋습니다.

이 작업은 FaultCode.CreateReceiverFaultCode 및 FaultCode.CreateSenderFaultCode를 사용하여 수행 할 수 있습니다.

나는 지금 당장이 과정을 밟고 있지만, WCF 오류로 보이는 SOAP 1.1 응답을 생성하는 심한 방해물에 부딪쳤다. 관심이 있으시면 여기에서 내 질문을 확인하십시오.

.NET WCF faults generating incorrect SOAP 1.1 faultcode values