Elmah nie działa z witryną asp.net


80

Próbowałem użyć elmah z moją witryną asp.net, ale za każdym razem, gdy próbuję przejść do http: // localhost: port / elmah.axd , otrzymuję wyjątek nie znaleziono zasobu. Mój web.config znajduje się poniżej.

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <sectionGroup name="elmah">
          <section name="security" requirePermission="false" 
                  type="Elmah.SecuritySectionHandler, Elmah"/>
          <section name="errorLog" requirePermission="false" 
                  type="Elmah.ErrorLogSectionHandler, Elmah" />
          <section name="errorMail" requirePermission="false" 
                  type="Elmah.ErrorMailSectionHandler, Elmah" />
          <section name="errorFilter" requirePermission="false" 
                  type="Elmah.ErrorFilterSectionHandler, Elmah"/>
        </sectionGroup>
      </configSections>
      <elmah>
        <security allowRemoteAccess="0" />
        <errorLog type="Elmah.SqlErrorLog, Elmah" 
                 connectionStringName="elmah-sql" />
        <errorMail
                from="my@account"
                to="myself"
                subject="ERROR From Elmah:"
                async="true"
                smtpPort="587"
                smtpServer="smtp.gmail.com"
                userName="my@account"
                password="mypassword" />
      </elmah>

      <connectionStrings>
        <add name="elmah-sql" connectionString="data source=(sqlserver); 
               database=elmahdb;
             integrated security=false;User ID=user;Password=password"/>
      </connectionStrings>
      <system.web>
        <compilation debug="true">
          <assemblies>
            <add assembly="Elmah, Version=1.0.10617.0, Culture=neutral, 
               PublicKeyToken=null"/>
          </assemblies>
        </compilation>
        <authentication mode="Windows"/>

        <httpHandlers>
          <remove verb="*" path="*.asmx"/>
          <add verb="*" path="*.asmx" validate="false" 
            type="System.Web.Script.Services.ScriptHandlerFactory, 
               System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
                  PublicKeyToken=31BF3856AD364E35"/>
          <add verb="*" path="*_AppService.axd" validate="false" 
               type="System.Web.Script.Services.ScriptHandlerFactory, 
               System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
                   PublicKeyToken=31BF3856AD364E35"/>
          <add verb="GET,HEAD" path="ScriptResource.axd" 
                 type="System.Web.Handlers.ScriptResourceHandler, 
               System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
                    PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
        <httpModules>
          <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, 
                System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
                PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
      </system.web>

      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules runAllManagedModulesForAllRequests="true">
          <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="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
          <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
          <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
        </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"/>
          <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" 
                       preCondition="integratedMode" 
               type="Elmah.ErrorLogPageFactory, Elmah"/>
        </handlers>
      </system.webServer>
    </configuration>

EDYCJA: Elmah = (moduły rejestrowania błędów i programy obsługi)
http://code.google.com/p/elmah/


1
Aman: Zakładasz, że wszyscy wiedzą, czym jest ELMAH. Edytowałem pytanie, aby podać link. Popraw to, jeśli tak nie jest.
shahkalpesh

Myślę, że może być konieczne zarejestrowanie programu obsługi / modułu na poziomie IIS, myślę, że to zadziała.
shahkalpesh


Dzięki @shahkalpesh. Jestem naprawdę przytłoczony pracą! Chociaż pomyślałem, że to pytanie może pomóc również innym i stworzyłem wiki społeczności.
TheVillageIdiot

Dziwne, ale wypróbowałem sugestie bez powodzenia! Najgorsze, kiedy próbowałem uzyskać dostęp elmah.axd, IIS zawiesza się.

Odpowiedzi:


28

Spróbuj zarejestrować moduły i programy obsługi w sekcjach „httphandlers” i „httpmodules” w <system.web>sekcji:

    <httpHandlers>
      ......
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
      .....

    </httpHandlers>
    <httpModules>
        .......
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
       .......
    </httpModules>

Yippe to działa !!! Przyszło mi do głowy, żeby to tam umieścić, ale nie widziałem tego w żadnych rozwiązaniach dla blogów internetowych itp., Więc byłem trochę nieśmiały, aby to zrobić.
TheVillageIdiot

153

Właśnie miałem podobny problem z Elmah, który nie działał we wdrożeniu IIS7. Zauważyłem, że muszę zarejestrować moduły i handlery Elmah w system.webAND system.webServer:

<system.web>
...
  <httpHandlers>
    ...
    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    ...
  </httpHandlers>
  <httpModules>
    ...
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    ...
  </httpModules>
  ...
</system.web>
<system.webServer>
  ...
  <modules runAllManagedModulesForAllRequests="true">
    ...
    <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
    <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    ...
  </modules>
  <handlers>
    ...
    <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    ...
  </handlers>
<system.webServer>

Z jakiegoś powodu ELMAH pracował dla mnie na innym serwerze. Co jest dziwne, ponieważ powinno być identyczne z naszym, ale mamy tylko deklaracje system.webserver.
Maximillian

2
Dzięki, to naprawdę mi pomogło.
stimms

1
Niesamowite, ta odpowiedź zaoszczędziła mi dużo czasu.
Chris F

22
dla tych z Was, którzy wycinają i wklejają z system.web do system.webserver, upewnijcie się, że dodaliście atrybut name w sekcji obsługi.
Jason Watts

2
Dzięki, u mnie zadziałało. Ale czy to błąd? <system.web>ma być dla IIS6, podczas gdy <system.webServer>jest dla IIS7 + na stackoverflow.com/questions/355261/ ...
DeepSpace101

120

Możesz też potrzebować tego

<elmah>
    <security allowRemoteAccess="1" />
</elmah> 

kiedy dostaniesz

403 - Dostęp zabroniony: odmowa dostępu. Nie masz uprawnień do przeglądania tego katalogu lub strony przy użyciu podanych poświadczeń.


1
Zrobiło to dla mnie po zweryfikowaniu posta eyesnz.
CitizenBane

4
Tak, ale nie zapomnij zabezpieczyć tej strony poprzez uwierzytelnienie. W przeciwnym razie każdy może czytać Twoje logi.
driAn

No tak. 404 to „nie znaleziono”, ale najczęściej, gdy
poprawisz

3
musisz dodać w sekcji sectiongroup name = "elmah" <section name = "security" requirePermission = "false" type = "Elmah.SecuritySectionHandler, Elmah" />
Mhmd

Musisz to dodać po tagu </configSections>
Karl Glennon

12

Brakowało tego wiersza, gdy instalowałem przy użyciu NuGet (VS 2013, IIS 8.0):

<system.webServer>
  <handlers>
    <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
 </handlers>
</system.webServer>

Dodanie go rozwiązało problem błędu 404.


Dla mnie to też absolutnie zadziałało. Dzięki Peter.
Lee Englestone,

To była dla mnie poprawka, jestem również na vs 2013, iis8.0, użyłem nuget do zainstalowania.
James Bailey

To naprawiło to dla mnie w VS 2015 na localhost w debugowaniu po użyciu nuget do zainstalowania ELMAH.
SenseiHitokiri

Ja też to miałem. Podniosłem problem z projektem github.com/alexbeletsky/elmah-mvc/issues/89
m.edmondson

U mnie też
zadziałał

11

Jednym ze sposobów obejścia tego dzisiaj jest użycie nuget.

Visual studio: menu-> narzędzia-> menedżer pakietów bibliotek-> konsola menedżera pakietów

install-package elmah

HTH


nuget naprawdę ułatwia życie programistom.
TheVillageIdiot

Świetnie na moim web.config
Benj Sanders

9

Pakiet NuGet nie dodaje następujących ważnych wierszy do pliku web.config, powodując błąd 403.

<configuration>
  <elmah>  
    <security allowRemoteAccess="1" />
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/app_data/elmah" />
  </elmah>
</configuration>

Możesz również ograniczyć dostęp do dzienników błędów przez

<add name="Elmah" verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

0

jeśli używasz obszarów, upewnij się, że zaktualizowałeś jeden z kluczy appSetting

Domyślna

<add key="elmah.mvc.route" value="elmah" />

Jeśli jesteś obszarem jako Admin

<add key="elmah.mvc.route" value="admin/elmah" />
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.