Настройка ELMAH - ошибки не отлавливаются

Я настроил ELMAH точно так же, как и в примере приложения. Я пытаюсь выдать ошибку, чтобы протестировать ELMAH, используя:

throw new InvalidOperationException();

К сожалению, однако, мое приложение идет прямо к ошибке, и ELMAH не улавливает/не регистрирует ошибку. Я использую ASP.NET 3.5. Я не уверен, что я делаю неправильно, так как Web.Config точно такой же, как и образец.


person Dkong    schedule 08.09.2009    source источник
comment
@DKong: я немного пересмотрел свой пост, дайте мне знать, если это вам вообще поможет...   -  person RSolberg    schedule 09.09.2009
comment
Вы видите InvalidOperationException YSOD, связанный с вашим кодом выше? Или это другое исключение?   -  person mxmissile    schedule 09.09.2009
comment
Вы можете опубликовать свой web.config? (очевидно, удалите любую личную информацию)   -  person Jason Irwin    schedule 09.09.2009


Ответы (2)


Дважды проверьте свой Web.config. У меня была такая же проблема, пока я не понял, что забыл зарегистрировать модуль.

<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />

Я нашел эту статью на dotnetslackers полезной.

person Mattio    schedule 08.09.2009
comment
у меня есть эта линия, но до сих пор нет радости. - person Dkong; 09.09.2009
comment
Дох, я пропустил эту строку. Это было особенно неприятно, потому что это работало в dev, но я использую IIS 7 в dev, IIS 6 в prod... Интересно, почему мне это не понадобилось в IIS? В любом случае, спасибо, это было именно так. - person CubanX; 30.08.2010

Поскольку Elmah является открытым исходным кодом, вы должны добавить код в виде проекта в свое решение и убедиться, что у вас есть прерывание Visual Studio для всех исключений. Вполне возможно, что Elmah генерирует исключение, которое будет проглочено. Именно это происходило со мной, и это было разрешение на хранимую процедуру, которая вставляет ошибку.

ИСХОДНО
Находится ли ваш тест в блоке try/catch? Если это так, вам придется явно принудительно вести журнал.

Elmah.ErrorSignal.FromCurrentContext().Raise(ex);

МОЯ НАСТРОЙКА WEB.CONFIG

  <configSections>
    <sectionGroup name="elmah">
      <section name="security" type="Elmah.SecuritySectionHandler, Elmah"/>
      <section name="errorLog" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
    </sectionGroup>
   ...
   </configSections>

  <elmah>
    <security allowRemoteAccess="0" />
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTElmahConnectionString" />
    <errorFilter>
      <test>
        <equal binding="HttpStatusCode" value="404" type="Int32" />
      </test>
    </errorFilter>
  </elmah>


<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ScriptModule"/>
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory"/>
      <remove name="ScriptHandlerFactoryAppServices"/>
      <remove name="ScriptResource"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </handlers>
  </system.webServer>
person RSolberg    schedule 08.09.2009
comment
пока нет блока try catch. я просто хочу, чтобы базовая обработка по умолчанию работала, прежде чем я попытаюсь сигнализировать - person Dkong; 09.09.2009