Gibt es eine Möglichkeit, Ausnahmen in regulären ASP.NET-Webdienst (asmx) mit ELMAH global behandeln, wie wir es in ASP.NET-Website tun?Handle Ausnahmen in Web-Services mit Elmah
Antwort
ASP.NET-Webdienste werden nie ausgelöst Application_Error
Ereignis und Ausnahmen können nicht global von ELMAH behandelt werden, wie in ASP.NET-Apps. Aber wir können "manuell" log Ausnahmen mit ELMAH:
public int WebServiceMethod() {
try {
...
}
catch (Exception ex) {
Elmah.ErrorLog.GetDefault(
HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
}
}
Sie ein Soapextension verwenden können, dies zu tun: mit den folgenden Zeilen
using System;
using System.Web.Services.Protocols;
namespace MyNamespace
{
class ELMAHExtension : SoapExtension
{
public override object GetInitializer(Type serviceType)
{ return null; }
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{ return null; }
public override void Initialize(object initializer)
{ }
public override void ProcessMessage(SoapMessage message)
{
if (message.Stage == SoapMessageStage.AfterSerialize &&
message.Exception != null)
{
// Log exception here
}
}
}
}
Sie registrieren diese in der web.config:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.ELMAHExtension, MyDLL" priority="1" group="1" />
</soapExtensionTypes>
</webServices>
</system.web>
Dadurch erhalten Sie Zugriff auf die Objekte HttpContext und SoapMessage, die Ihnen alle Details über das, was aufgerufen wurde, geben sollen. Ich denke, dass die Ausnahme, die Sie in diesem Stadium abrufen, immer eine SoapException sein wird und dass das Bit, an dem Sie interessiert sind, wahrscheinlich die innere Ausnahme ist.
Danke, ich werde es versuchen. –
hatte keine Chance, dies noch zu versuchen, aber es sieht so aus, als ob es funktionieren sollte. Wo "Ausnahme hier log" steht, erscheint der Code "Elmah.ErrorLog.GetDefault ( HttpContext.Current) .Log (new Elmah.Error (ex, HttpContext.Current));" könnte den Trick machen. – codeulike
Es funktioniert tatsächlich. – avesse
können Sie diesen Code verwenden
try{
// your code in here
}
catch (Exception ert)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ert);
}
- 1. elmah: Ausnahmen ohne HttpContext?
- 2. Handle Ausnahmen in AppDomain.CurrentDomain.UnhandledException
- 3. Behandelt elmah auch abgefangene Ausnahmen
- 4. Handle globale Ausnahmen in VB
- 5. SCJP-Prüfung: Handle Ausnahmen
- 6. Handle CursorLoader Ausnahmen
- 7. Elmah protokolliert keine Ausnahmen mit WebAPI mit HttpResponseException
- 8. Handle Ausnahmen in Entity Framework 4
- 9. Handle Ausnahmen mit Decorator auf Eigenschaften in Python
- 10. Catching Exceptions in Hintergrund Threads mit Elmah
- 11. Mit Elmah interessante Ereignisse zu überprüfen
- 12. Elmah Backup-Ausnahmeprotokollierung
- 13. Asynctask mit Webservices in Android
- 14. WebServices in Java Jersey mit
- 15. Clientseitige Fehlerprotokollierung mit Elmah
- 16. Erste Schritte mit Elmah?
- 17. Externe Konfigurationsdateien mit Elmah
- 18. HANDLE in Handle umwandeln
- 19. Webservices mit C++
- 20. Zugriff auf Elmah auf Produktionsserver mit Elmah MVC nicht möglich?
- 21. EditText mit WebServices verbinden
- 22. Silverlight 2 Webservices
- 23. Elmah für WCF für Ausnahmebehandlung
- 24. Unbehandelte Ausnahmen mit NLog protokollieren? Sollten ELMAH und NLog zusammen verwendet werden?
- 25. GPWebpay Webservices in PHP
- 26. Hilfe mit Elmah-Konfiguration in ASP.NET
- 27. Webservices in Java
- 28. Elmah Fehlerfilter
- 29. Webservices mit langen Task-Threads
- 30. Laravel 5.2 - Problem mit Webservices
Das ist, was ich dachte, aber ich war zu überprüfen, ob es eine „sauberere“ Lösung. Danke –
Ja, sauberere Lösung oder Übung wäre auch für mich interessant. Und das ist eine gute Frage (+1). –
Ich habe endlich Ihre Lösung verwendet, ich habe keinen besseren Weg gefunden. Danke für den Tipp. –