Как программно определить, включен ли ELMAH?
Определить, включен ли ELMAH?
Ответы (3)
Потому что:
ELMAH можно динамически добавлять в работающее веб-приложение ASP.NET или даже во все веб-приложения ASP.NET на компьютере без необходимости повторной компиляции или повторного развертывания.
вам не нужно определять, присутствует ли он. Просто напишите свой код регистрации, как если бы он присутствовал, и если это не так, ничего не будет зарегистрировано.
Интересно?: Как заставить ELMAH работать с атрибутом ASP.NET MVC [HandleError]? (принятый ответ принадлежит автору ELMAH)
Вы можете перечислить все загруженные модули (через HttpApplication.Modules), и если модуль Elmah существует, то Elmah включен:
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
Не уверена. Не врубал это.
В дополнение к ответу Тадаса я придумал следующий код, который работает для меня (обратите внимание, что я перевел его из VB, не проверяя, компилируется ли он, поэтому 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;
}
Это также позволяет обойти проблемы, которые у меня были с получением ответа 401 при запросе elmah.axd (я использовал проверку подлинности Windows), и намного быстрее, и не предполагает определенного местоположения для elmah.axd.