Ich habe Probleme mit der Ausnahmebehandlung in meinem Datasnap REST Service (Delphi XE3, aber auch mit Delphi 10 Seattle). Ich habe im Laufe der Jahre ein halbes Dutzend Windows-Dienste geschrieben und schließe immer eine TApplicationEvents-Komponente ein, damit ich alle Anwendungsausnahmen im Windows-Ereignisprotokoll protokollieren kann.Ausnahmebehandlung in Delphi Datasnap REST Server
Dieses Verhalten tritt jedoch nicht mit einem Datasnap-Dienst auf. Das TApplicationEvents.OnException-Ereignis wird nie ausgelöst, daher nehme ich an, dass etwas anderes die Ausnahme ausnutzt und es behandelt, bevor es hier ankommt.
Die Ausnahme wird im Ergebnis der Web-Service-Methode angezeigt, was gut ist, weil ich damit auf der Client-Seite zumindest etwas anzeigen kann, aber ich möchte es auch vorher abfangen, damit ich es könnte verschiedene serverseitige Ausnahmen behandeln.
Der einzige konsistente Weg, den ich bisher geschafft habe, besteht darin, jede einzelne Methode in einen try..except
Block zu wickeln und die Ausnahme in jeder Methode zu behandeln, bevor die Ausnahme erneut ausgelöst wird. Mit einem Web-Service von 20 Methoden und wachsend, wird dies nicht wirklich skalieren.
Ich habe auch versucht, die OnError, OnTrace und andere Ereignisse der einige der Datasnap Komponenten (TDSServer, TDSHTTPService, TDSTCPServerTransport, etc.) zu implementieren, aber diese scheinen auch nie gefeuert werden.
Hat irgendjemand so etwas gefunden, bitte?
Verwandte (für Java): [So greifen Sie auf nicht abgefangene Ausnahmen in einer Java-Servlet-Webanwendung] (http://stackoverflow.com/questions/7410414/how-to-grab-uncaught-exceptions-in-a-java -servlet-web-application) Vielleicht ist eine ähnliche Lösung möglich. (Wenn in Datasnap ein globaler Anforderungsfiltermechanismus vorhanden ist) – mjn