Global log-Ausnahmen aus ASP.NET [ScriptService] - Dienste
Ich bin mit dem [System.Web.Script.Services.ScriptService] - tag zu verwenden, web-services-callable von client-side javascript. Was ich brauche ist eine Art von Global-logging werden alle nicht behandelten Ausnahmen in diesen Methoden. Auf der client-Seite, erhalte ich die Fehlermeldung callback und können nun von dort aus, aber ich brauche eine server-Seite fangen die Anmeldung die Ausnahme.
Dem Kerl unter dieser url:
http://ayende.com/Blog/archive/2008/01/06/ASP.Net-Ajax-Error-Handling-and-WTF.aspx
deutet darauf hin, dass dies nicht getan werden kann.
Ist das genau? Muss ich ernsthaft zu gehen, um jeden einzelnen webmethod in das gesamte system und try/catch-Methode als ganzes.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ein HTTP-Modul zur Erfassung der exception stack trace aus und geben Sie die Ausnahme, die ausgelöst wird durch die web service-Methode.
Zuerst ein paar hintergrund -...
Wenn eine web-service-Methode eine Ausnahme auslöst, den HTTP-Antwort-status-code 500.
Wenn benutzerdefinierte Fehler dann wieder aus dem web
service wird wieder die Ausnahme
Nachricht und stack-trace auf dem client
als JSON. Zum Beispiel:
{"Message":"Exception
message","StackTrace":" at
WebApplication.HelloService.HelloWorld()
in C:\Projects\Stackoverflow
Examples\WebApplication\WebApplication\HelloService.asmx.cs:line
22","ExceptionType":"System.ApplicationException"}
Wenn benutzerdefinierte Fehler sind, dann ist die
web service gibt eine Standard-Nachricht
an den client und löscht den stack
trace-und der Ausnahme-Typ:
{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}
Also, was wir tun müssen, ist, legen Sie benutzerdefinierte Fehler aus für die web-service-und plug-in eine HTTP-Modul:
Den code unten ist ein Beispiel für ein HTTP-Modul, das dies tut:
Dieses Modul verwendet die folgenden filter, um das überschreiben der Inhalte an den client gesendet werden, und speichert die original-bytes (die enthalten die exception stack trace-und exception-Typ):
Diese Methode erfordert benutzerdefinierte Fehler ausgeschaltet werden, die für die web services. Sie würde wahrscheinlich wollen, zu halten, benutzerdefinierte Fehler auf, für den rest der Anwendung, so dass die web-services sollten in ein sub-Verzeichnis. Benutzerdefinierte Fehler können ausgeschaltet werden in diesem Verzeichnis nur mit Hilfe eines web.Konfig überschreibt die übergeordnete Einstellung.
Führen Sie die Gespeicherte Prozedur in der backend. Dann, für eine einzelne variable, es gibt mehr als 1 Wert. Deswegen Konflikte Auftritt, und dieser Fehler wird geworfen.
Ich weiß, das beantwortet nicht die Frage pro-sagen, aber ich ging auf meinen eigenen quest eine Weile zurück, dies heraus zu finden und würde mit leeren Händen. Endete das umbrechen von jeder web-service-Aufruf in ein try/catch und catch-ruft unsere Fehler-logger. Saugt, aber es funktioniert.
In ASP.Net es ist möglich, fangen alle Ausnahmen behandelt mit einem Globale error-handler obwohl der blog-post, dass dies nicht funktionieren würde, aber Sie könnte das experiment mit diesem Ansatz versucht, rethrow der Fehler in irgendeiner Weise?
Andere Idee würde sein, mit Blick auf die open-source elmah (Error Logging Modules and Handlers) für ASP.Net das könnte helfen, oder jemand in der Gemeinschaft haben vielleicht eine Idee.