문제

우리 그룹은 서비스 기반(.NET WCF) 애플리케이션을 개발 중이며 내부 서비스에서 예외를 처리하는 방법을 결정하려고 합니다.예외를 던져야 할까요?XML로 직렬화된 예외를 반환하시겠습니까?오류 코드만 반환하시겠습니까?

사용자는 이러한 예외를 볼 수 없으며 애플리케이션의 다른 부분에만 해당된다는 점을 명심하세요.

도움이 되었습니까?

해결책

WCF 사용 SoapFaults 서비스에서 클라이언트로 또는 클라이언트에서 서비스로 예외를 전송하는 기본 방법입니다.

다음을 사용하여 사용자 정의 SOAP 오류를 선언할 수 있습니다. FaultContract 계약 인터페이스의 속성:

예를 들어:

[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!"));
    }
}

다른 팁

그렇다면 표준 SOAPException을 던지는 것은 어떨까요?오류 코드와 직렬화된 XML의 문제점은 오류가 실제로 발생했음을 인식하기 위해 추가 논리가 필요하다는 것입니다.이러한 접근 방식은 웹 서비스의 반대편에서 발생해야 하는 특수한 로깅이나 논리가 있는 경우에만 유용합니다.이러한 예는 오류 예외 보고서와 함께 "계속해도 괜찮습니다"라는 플래그를 반환하는 것입니다.

어떻게 던지든 호출 측에서는 여전히 예외가 있음을 인식하고 처리해야 하기 때문에 작업이 더 쉬워지지는 않습니다.

나는 약간 혼란스럽습니다. 경솔하게 말하는 것이 아닙니다. 한편으로는 XML로 직렬화된 예외를 반환하고 다른 한편으로는 사용자가 예외를 볼 수 없을 것이라고 말했습니다.누가 이러한 예외를 보게 될까요?

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

Phil, 응용 프로그램의 서로 다른 부분은 WCF를 사용하여 서로 호출합니다."XML로 직렬화된 예외 반환"이란 함수의 반환 값이 예외 개체가 된다는 의미입니다.성공은 null로 표시됩니다.

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

WCF 오류 계약은 좋은 것 같지만 이에 대해 아무것도 모릅니다.지금 구글을 확인해 보세요.

그 정도의 세부 사항이 다시 전송되는 것에 동의하지 않는 한 예외를 클라이언트에 직접 다시 보내는 것을 피할 것입니다.

WCF 오류를 사용하여 오류 메시지와 코드(수신자가 재시도할지, 오류가 발생하는지 등을 결정하는 데 사용할 수 있는 것)를 전송하는 것이 좋습니다. 오류가 있는 발신자인지 수신자인지에 따라 다릅니다.

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

지금 이 과정을 진행하고 있지만 WCF 오류로 인해 SOAP 1.1 응답이 생성된 것 같은 불쾌한 문제에 부딪혔습니다.관심이 있으시면 여기에서 제 질문을 확인하실 수 있습니다.

.NET WCF 오류로 인해 잘못된 SOAP 1.1 오류 코드 값이 생성됨

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top