오류 코드 또는 예외 - ASP.Net 웹 서비스에 대한 모범 사례는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/78064

  •  09-06-2019
  •  | 
  •  

문제

나는 이것을 읽었다 WCF에는 사용자 정의 오류 코드 등이 내장되어 있습니다.

하지만 가장 좋은 방법은 무엇입니까? ASP.Net 웹 서비스?예외를 발생시키고 클라이언트가 예외를 처리하도록 하거나 클라이언트가 처리를 수행하는 데 사용할 오류 코드(성공, 실패 등)를 보내도록 합니까?

업데이트:만약의 경우 추가 논의를 위해 비누, 클라이언트가 웹 서비스 호출은 알림 메시지(반환 값이 예상되지 않음)로 간주되므로 모든 것이 원활하게 진행되고 svc에서 예외가 발생하지 않습니다.

이제 클라이언트는 통신/네트워크 문제 또는 서버와 클라이언트 사이의 문제로 인해 알림 호출이 손실되었는지 어떻게 알 수 있습니까?이것을 예외가 발생하지 않은 것과 비교해 보세요.클라이언트는 성공했다고 가정할 수 있습니다.하지만 그렇지 않습니다.전화가 어딘가에서 끊겼습니다.

'성공' 오류 코드를 보내 클라이언트에게 통화가 원활하게 진행되었는지 확인합니까?이를 달성할 수 있는 다른 방법이 있습니까? 아니면 위의 시나리오가 가능합니까?

도움이 되었습니까?

해결책

제프 앳우드가 게시했습니다. 흥미로운 기사 얼마 전 이 주제에 대해..NET 예외는 대부분의 다른 툴킷과 호환되는 SoapFault로 변환되지만 오류의 정보는 그다지 좋지 않습니다.따라서 이 기사의 결론은 .NET 웹 서비스가 아주 좋은 예외 메시지를 발생시키지 않으므로 추가 정보를 추가해야 한다는 것입니다.

Private Sub WebServiceExceptionHandler(ByVal ex As Exception)
    Dim ueh As New AspUnhandledExceptionHandler
    ueh.HandleException(ex)

    '-- Build the detail element of the SOAP fault.
    Dim doc As New System.Xml.XmlDocument
    Dim node As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
        SoapException.DetailElementName.Name, _
        SoapException.DetailElementName.Namespace)

    '-- append our error detail string to the SOAP detail element
    Dim details As System.Xml.XmlNode = doc.CreateNode(XmlNodeType.Element, _
        "ExceptionInfo", _
        SoapException.DetailElementName.Namespace)
    details.InnerText = ueh.ExceptionToString(ex)
    node.AppendChild(details)

    '-- re-throw the exception so we can package additional info
    Throw New SoapException("Unhandled Exception: " & ex.Message, _
        SoapException.ClientFaultCode, _
        Context.Request.Url.ToString, node)
End Sub

비누 결함이 더 나은 이유에 대한 추가 정보 이 질문에.

다른 팁

웹 서비스를 어떻게 사용할 것인지에 따라 다릅니다.어떤 프로토콜을 사용할 예정인가요?

GET 또는 POST인 경우 호출하는 HttpWebRequest(.Net) 또는 기타 코드가 서버 오류를 수신하고 이를 처리하여 예외 코드를 추출해야 하므로 오류 코드를 반환하는 것이 더 좋습니다.

SOAP인 경우 사용자 정의 예외를 발생시키는 것이 완벽합니다(일부 스택 추적 등이 드러날 수 있으므로 내부 프레임워크 예외를 반환하고 싶지는 않습니다).외부 당사자에게).

SOAP 웹 서비스는 호출 코드를 일반 메서드 호출로 간주하도록 의도되었으므로 해당 호출 프레임워크는 예외를 잘 처리하고 전파할 수 있어야 하며, 따라서 호출 코드가 내부 호출을 처리하는 것처럼 보이고 작동하도록 해야 합니다. .

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