Déterminer si oui ou non ELMAH est activé?
Question
Comment puis-je déterminer si oui ou non programme ELMAH est activé?
La solution
Parce que:
ELMAH peut être ajouté dynamiquement à un exécutant l'application Web ASP.NET, ou même toutes les applications Web ASP.NET sur un machine, sans qu'il soit nécessaire de recompilation ou re-déploiement.
vous ne devriez pas besoin de détecter si elle est présente. Il suffit d'écrire votre code d'enregistrement comme si elle était présente, et si ce n'est pas, rien ne sera enregistré.
intérêt ?: Comment obtenir ELMAH travailler avec ASP.NET MVC [HandleError] attribut (réponse est acceptée par l'auteur ELMAH)
Autres conseils
Vous pouvez énumérer tous les modules chargés (via HttpApplication .Modules ) et si le module existe Elmah, puis Elmah est activé:
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
Je ne sais pas. Je n'ai pas treed cela.
Suite à la réponse de Tadas, je suis venu avec le code suivant qui fonctionne pour moi (notez que je traduis cela de VB sans vérifier si elle compile, si 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;
}
obtient également autour des problèmes que j'ai eu à obtenir une réponse 401 lors de la demande elmah.axd (j'utilisais l'authentification Windows), et est beaucoup plus rapide, et ne suppose pas un emplacement spécifique pour elmah.axd.