2013-03-12 17 views
8

Sto tentando di registrare eccezioni dal mio progetto API web asp.net utilizzando elmah. Sto riscontrando un problema in cui ogni errore viene registrato due volte.Gli errori vengono registrati due volte quando si utilizza Elmah con WebApi

Sto usando Elmah.Contrib.Web-Api e la mia classe di applicazione è il seguente:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); 

     RouteTable.Routes.MapHubs(); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

#if DEBUG 
     EntityFrameworkProfiler.Initialize(); 
#endif 

     GlobalConfig.CustomizeConfig(GlobalConfiguration.Configuration); 

    } 
} 

Se io commment la seguente riga allora ottengo nessun messaggio a tutti:

GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); 

E posso confermare che sto solo lanciando un errore e la chiamata che genera l'errore è stata chiamata una sola volta e non ho decorato manualmente i miei controller o metodi con l'attributo Elmah.

per cercare di risolvere questo ho rimosso il pacchetto contrib e aggiunsi seguito le istruzioni trovate qui http://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration

Questo non ha risolto il problema e viene registrato ancora due volte. Mi ha permesso di inserire un punto di interruzione nella classe Attribute e confermare che per ogni errore viene chiamato due volte.

Come posso risolvere questo?

+1

È possibile che siano presenti 2 voci di registro errori elmah nel proprio web.config? – danludwig

+0

Ho appena controllato due volte, e non c'è solo una volta lì. – Twisted

+0

Ancora cercando una risposta a questo – Twisted

risposta

3

Vorrei controllare la tua classe FilterConfig.cs, è possibile che il valore predefinito di HandleErrorAttribute venga aggiunto lì e sta rilasciando l'eccezione?

+1

Ho controllato e non è questo – Twisted

0

Hai visto this post? L'autore utilizza un ExceptionFilter per gestire le eccezioni di logging

+0

Sì, avevo visto quel post – Twisted

4

Quali voci correlate a ELMAH sono nel tuo web.config?

Avevo un problema simile in un'applicazione MVC: le eccezioni gestite venivano registrate due volte. Nell'applicazione utilizzo un filtro eccezioni personalizzato per registrare le eccezioni gestite su ELMAH utilizzando la segnalazione degli errori, mentre il modulo HTTP si occupa delle eccezioni non gestite.

Si è scoperto che avevo bisogno di impostare:

<add key="elmah.mvc.disableHandleErrorFilter" value="true" /> 

in web.config per disabilitare il filtro di eccezione incorporato all'interno del pacchetto ELMAH.MVC NuGet.

Il codice sorgente per le eccezioni che esso registra manipolato built-in filtro mostra: https://github.com/alexanderbeletsky/elmah-mvc/blob/master/src/Elmah.Mvc/HandleErrorAttribute.cs

+0

Grazie. e tornare a voi – Twisted

+0

No Questo non era vero :-( – Twisted

3

Per quello che vale, ho avuto lo stesso problema di ELMAH accedendo ciascuna eccezione per due volte nella mia applicazione API Web (utilizzando Elmah.Contrib.WebApi).

Confrontando le mie e-mail ELMAH con la cronologia delle mie origini, sono stato in grado di identificare che il problema è iniziato dopo che il pacchetto Ninject.Web.WebApi 3.0.2-unstable-9016 è stato installato tramite nuget.

Certo, disinstallando il pacchetto e commentando il legame a dipendenza singola che lo utilizzava, è stato risolto il problema della doppia registrazione. Reinstallare il pacchetto e lasciare il binding delle dipendenze commentato ha causato il riavvio del problema, quindi non era l'associazione stessa.

L'installazione della versione precedente (Ninject.Web.WebApi 3.0.2-unstable-8) non ha causato il verificarsi del problema, ma il binding delle dipendenze non funzionava più.

Ho scelto di vivere con il problema per il momento.

0

Per le altre persone con la registrazione due volte emettere (non credo che questo aiuta l'OP?) - questo è accaduto a me e il motivo era perché avevo applicato il filtro a livello globale

GlobalConfiguration.Configuration.Filters.Add(new ElmahErrorAttribute()); //log web api errors 

ma anche applicata l'attributo alla classe (doh!)

[ElmahError] 
public class TestController : ApiController 

Quindi, ovviamente, registrato due volte.

0

Ho riscontrato questo problema solo sulle risposte HTTP 401. Il problema si è verificato con l'abilitazione dell'autenticazione di Windows che stava causando al browser una seconda richiesta di negoziazione.

Nel mio caso, ero solo in grado di disabilitare l'autenticazione di Windows nel web.config:

<security> 
    <authentication> 
    <windowsAuthentication enabled="false" /> 
    </authentication> 
</security> 

Nota: se non si dispone della sezione di configurazione sbloccata, si può semplicemente disattivare Autenticazione di Windows in IIS.

Problemi correlati