Fehlercode oder Exception - das ist die beste Praxis für einen ASP.Net Web-Service ist?

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

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe der Thread für WCF lese eingebautes Benutzerdefinierte Fehlercodes und Sachen hat.

Aber was ist die beste Praxis ist für ASP.Net Web-Services? Muß ich Ausnahmen werfen und lassen würde verlassen senden die Client die Ausnahme behandeln oder einen Fehlercode (Erfolg, Fehler usw.), dass der Kunde nach seiner Verarbeitung zu tun.

Update: Just diskutieren weiter bei SOAP , sagen wir, der Kunde macht eine web svc Anruf, der eine entsprechende Meldung sein soll (kein Rückgabewert erwartet ), so geht alles glatt und keine Ausnahmen werden durch die SVC geworfen.

Nun wird, wie der Kunde wissen, ob die Meldung Anruf aufgrund eines Kommunikations / Netzwerkproblem oder etwas zwischen dem Server und dem Client verloren bekommen hat? vergleichen Sie dies mit keiner Ausnahme, die geworfen. Client könnte annehmen, es ist ein Erfolg. Aber es ist nicht. Der Anruf wurde irgendwo verloren.

Ist ein ‚Erfolg‘ Fehlercode stellt sicher an den Client senden, dass der Anruf ging glatt? Gibt es eine andere Möglichkeit, dies zu erreichen, oder ist das Szenario oben überhaupt möglich?

War es hilfreich?

Lösung

Jeff Atwood posted einen interessanten aerticle zu diesem Thema vor einiger Zeit. Allthough eine .NET-Ausnahme zu einem SoapFault umgewandelt wird, die mit den meisten anderen Toolkits kompatibel ist, sind die Informationen in den Fehlern nicht sehr gut. Dafür ist die conlusion des Artikels ist, dass .NET Web Service nicht werfen sehr gut Ausnahmemeldungen und Sie sollten zusätzliche Informationen hinzufügen:

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

Weitere Informationen, warum soapfaults besser in dieser Frage ist.

Andere Tipps

abhängig, wie Sie gehen, um den Web-Service zu konsumieren - d. H, welches Protokoll werden Sie verwenden

Wenn es GET oder POST, bessere Rendite Fehlercode, wie der Aufruf HttpWebRequest (NET) oder ein andere Code-Server-Fehler erhalten, und haben damit umgehen den Ausnahmecode zu extrahieren.

Wenn es SOAP ist -. Dann ist es völlig in Ordnung ist, individuelle Ausnahmen zu werfen (Sie wollen nicht, interne Rahmen Ausnahmen zurückzukehren, da sie einige Stack-Trace kann sich herausstellen, usw. an externe Dritte)

Da die SOAP Web Services sind genau an den anrufenden Code als normalen Methodenaufruf aussehen soll, sollte der entsprechende Aufruf Rahmen der Lage sein, die Ausnahme einfach gut zu handhaben und zu verbreiten, damit die Berufung Code aussehen zu machen und so tun, als sie beschäftigt mit internen Anrufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top