Lösen Sie Ausnahmen aus .NET web service
Habe ich eine Reihe von web services, die mit Hilfe der [WebMethod]
Attribut. Ist es als "gute Praxis" zu werfen ArgumentException
aus einer solchen Methode, wenn die Argumente sind nicht ordnungsgemäß angegeben (und keine sinnvolle Standardwerte verwendet werden könnten)? Wenn dem so ist, sollte diese Ausnahme abgefangen werden und erneut geworfen, um sich dann sowohl auf dem server und dem client?
AFAIK sollte es keine Notwendigkeit, erneut zu werfen, wie Sie können konfigurieren, Fehler, gesendet zu werden, nach unten den Draht. Und auf den ersten Blick würde ich sagen ja, zu werfen, aber es hängt davon ab, - Ihre Struktur ist so strukturiert, verwenden Sie die composite-Typen mit
Results
und Errors
Sammlungen, zum Beispiel.InformationsquelleAutor Chris Cooper | 2011-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, das werfen von Ausnahmen von web-services ist keine gute Praxis, da .NET Ausnahmen (wie
ArgumentException
) nicht unterstützt cross-Plattform (denke daran, wie ein Java-client brauchen würde, um zu reagieren).Den standard-Mechanismus für die Angabe von Ausnahmen in Web-Services ist eine Soap-Fehler.
Mit
.asmx
, werfen einen SOAPException generiert einen Fehler für Sie.Wenn Sie sich bewegen, WCF, man kann sich FaultContracts.
Für verbessertes debugging von remote-Ausnahmen zwischen ein .Net-client und .Net-server, Sie könnten betrügen und senden eine Ausnahme über den Draht mithilfe includeExceptionDetailInFaults in deiner config. Die Ausnahme selbst muss serialisierbar sein, um für diese zu arbeiten. Allerdings werden Sie wollen, um diese zu deaktivieren, bevor Sie Ihr system in die Produktion gelangen.
Nebenbei, Sie werden oft feststellen, dass, wenn der Anrufer die SOAP-Anfrage Aufruf zu schlecht ausgebildet (z.B. wenn Ihre Argumente sind Entitäten, die nicht deserialisiert werden kann), dass Ihre
WebMethod
werden nicht genannt - die Anrufer nur einen Fehler (oft ziemlich kryptisch).Die oben erwähnten Mängel, die für schlechte Argumente, die von den Kunden anrufen, um Ihre service generiert werden soll, wenn der Aufruf Argumente überprüft werden.
Möglicherweise im Zusammenhang - Einmal einen Antrag weitergeleitet hat, Validierung, für Ihre eigenen internen Systemstatus Behauptung, Sie könnten auch Code-Verträge zum erkennen von internen Fehlern (oder möglicherweise, fehlen Validierungen, die sollten vorher schon gegeben). Diese werden allerdings nicht propogated an den client.
InformationsquelleAutor StuartLC
Mithilfe von Ausnahmen vs benutzerdefinierte Fehlercodes ist immer eine harte Entscheidung. Sie sollten einschätzen, wie 'außergewöhnlich' der Fall ist und wie planen Sie, um den Fehler zu behandeln, die auf der consumer-Seite. Verwenden Ausnahme ist normalerweise die unerwarteten Fälle (wie ein wichtiger parameter fehlt) und benutzerdefinierte Fehlercodes zu handhaben bussiness-wie Fehler.
UPDATE: dies natürlich nur gilt, wenn Sie beim erstellen eines neuen service. Wenn Sie eine vorhandene zu ändern, müssen Sie wissen, wie Sie die vorhandenen clients nutzen und wie Sie erwarten, dass Fehler-codes.
InformationsquelleAutor Dercsár
Hier ist ein schöner Artikel über web-service-Ausnahmen
InformationsquelleAutor adrianm