Domanda

Come è possibile determinare a livello di codice o meno ELMAH è abilitato?

È stato utile?

Soluzione

A causa:

  

ELMAH può essere dinamicamente aggiunto a un   l'esecuzione di applicazioni web ASP.NET, o   anche tutte le applicazioni Web ASP.NET in un   macchina, senza alcuna necessità di   ricompilazione o ri-distribuzione.

non dovrebbe essere necessario per rilevare se è presente. Basta scrivere il vostro codice di registrazione come se fosse presente, e se non lo è, non sarà registrata.

Di interesse ?: Come arrivare ELMAH al lavoro con ASP.NET MVC attributo [HandleError]? (risposta accettato è per autore di ELMAH)

Altri suggerimenti

È possibile enumerare tutti i moduli caricati (via HttpApplication .Modules ) e se esiste modulo Elmah, quindi Elmah è attivata:


foreach (var m in Application.Modules) {
  if (m is Elmah.ErrorlogModule) {
   // ...
  }
}

Non è sicuro. Non hanno alberata questo.

A seguito della risposta Tadas', mi si avvicinò con il seguente codice che funziona per me (si noti che ho tradotto questo da VB senza controllare se si compila, in modo YMMV):

bool foundElmah = false;

foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
    var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
    if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
        foundElmah = true;
        break;
    }
}

if (foundElmah) {
    // do something here, like populate the application cache so you don't have to run this code every time
    return true;
} else {
    // store in application cache, etc.
    return false;
}

Questo diventa anche intorno ai problemi che ho avuto con ottenere una risposta 401 quando si richiede elmah.axd (stavo usando autenticazione di Windows), ed è molto più veloce, e non assume una posizione specifica per elmah.axd.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top