2009-05-03 7 views
3

SOAP을 사용하여 클라이언트에 오류를 반환하는 방법을 혼동합니다.SOAP로 인한 WCF 오류

나는 wcf 서비스를 가지고 있지만 클라이언트가 어떤 기술을 사용하고 있는지 확실하지 않아 SOAP 사양을 고수하고 싶습니다.

내가 읽은 한, 오류 메시지가이를 처리하는 가장 좋은 방법 인 것 같습니다.

나는 많은 다른 가능한 오류를 가지고 내 서비스를 볼 수 있습니다

: 널 \ 데이터 오류를

  • 데이터 형식 오류를 예상

    • 는 : 이미
    • 데이터 범위 오류 "고객 (즉 DB는 3 개 문자를 할 수 있습니다) "," "귀하의 요청을 처리 유형 오류 할 수 없습니다 것은

    은 그 고장의 각각의 새로운 객체를 생성하고 같은 던져 적절한 수 있을까요 존재 :

    FaultException<NullFault>(nf); 
    FaultException<InvalidDataFault>(idf); 
    FaultException<ArguementFault>(af); 
    FaultException<RangeFault>(rf); 
    

    클라이언트는 많은 속성이있는 큰 개체를 실질적으로 모든 방법 (예 : 고객, 주문 등)에 전달하고 있습니다.

    이것이 오류를 처리하고 클라이언트에게 다시 보내는 적절한 방법일까요?

    메서드 위의 특성에 각 오류를 추가해야 할 필요는 없습니다.

    IE : 또한

    [OperationContract] 
    [FaultContract(typeof(NullFault))] 
    [FaultContract(typeof(InvalidDataFault))] 
    [FaultContract(typeof(ArguementFault))] 
    [FaultContract(typeof(RangeFault))] 
    void CreateCustomer(Customer customer); 
    

    , 어떤 GenericFault에 대해? 비즈니스 규칙 오류는 어떻게 처리합니까? 예 : 고객이 이미 존재하고 너무 많은 광고 항목, 해당 지역으로 배송되지 않음, 결제 수단이 수락되지 않았습니까?

    이 방법이 적절한 지 또는 다른 해결책이 있고 '비즈니스 규칙'상황을 어떻게 처리 할 것인지 알려주세요.

  • 답변

    2

    오류를 반환하는 것은 일반적으로 오류를 해결하는 올바른 방법이지만 실수로 반환 한 정보로 클라이언트 프로그램이 수행 할 작업을 스스로 물어 봐야합니다. 클라이언트가 오류가 발생했다는 것을 알아야만하는 경우 필요한 것은 단일 오류입니다. 이 오류에는 클라이언트가 사용자에게 표시 할 수있는 메시지 텍스트가 포함될 수 있습니다.

    클라이언트가 NullFault인지 RangeFault인지에 따라 다른 조치를 취해야하는 경우 별도의 오류가 필요할 때입니다. 그러나 서로간에 차이가 없다면 자신과 클라이언트 프로그램을 약간의 시간과 노력으로 저장하고 단일 오류 만 정의하십시오.

    +0

    답장을 보내 주신 John 께 감사드립니다. 빠른 속행 질문 : 단일 결함 방식으로 이동하려면 결함 유형 (예 : NullReference, Range, InvalidData, BusinessRule, Other)의 enum 속성을 만드는 것이 좋습니다. 이 열거 형도 비누 메시지로 전달되는지 알고 계십니까? 감사합니다, 스티븐 – stevenrosscampbell

    +0

    당신은 그러한 열거 형을 반환 할 수 있지만 고객이 그 정보를보고 그걸로 뭔가를해야한다는 것을 명심하십시오. 귀하가 보낸 정보로 프로그래밍 방식을 사용하지 않을 경우, 보내지 마십시오. –

    +0

    예, 동의합니다. 내가 할 수있는 일은 그들에게 그것에 대해 이야기하고 적절하게 사용하기를 바랍니다. 감사합니다. 스티븐 – stevenrosscampbell