Elmah arbeitet nicht mit der asp.net Seite


80

Ich habe versucht, elmah mit meiner asp.net-Site zu verwenden, aber wenn ich versuche, zu http: // localhost: port / elmah.axd zu wechseln , wird die Ausnahme "Ressource nicht gefunden" angezeigt . Meine web.config ist unten angegeben.

    <?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>

BEARBEITEN: Elmah = (Fehlerprotokollierungsmodule und -handler)
http://code.google.com/p/elmah/


1
Aman: Sie gehen davon aus, dass jeder weiß, was ELMAH ist. Ich habe die Frage bearbeitet, um den Link bereitzustellen. Korrigieren Sie es, wenn dies nicht der Fall ist.
— Shahkalpesh

Ich denke, Sie müssen den Handler / das Modul möglicherweise auf IIS-Ebene registrieren, damit es funktioniert.
— Shahkalpesh


Danke @shahkalpesh. Ich bin wirklich überwältigt von der Arbeit! Obwohl ich dachte, diese Frage könnte auch anderen helfen und machte es zum Community-Wiki.
— TheVillageIdiot

Seltsam, aber ich habe die Vorschläge ohne Glück ausprobiert! Am schlimmsten ist, dass elmah.axdder IIS hängt , als ich versuchte, darauf zuzugreifen .

Antworten:


28

Versuchen Sie, die Module und Handler in den Abschnitten "httphandlers" und "httpmodules" im <system.web>Abschnitt zu registrieren :

    <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 es funktioniert !!! Mir kam auch der Gedanke, es dort abzulegen, aber ich habe es in keiner Online-Blog-Lösung usw. gesehen, also war ich etwas schüchtern, es zu tun.
— TheVillageIdiot

153

Ich hatte gerade ein ähnliches Problem damit, dass Elmah nicht in einer IIS7-Bereitstellung arbeitete. Ich stellte fest, dass ich die Elmah-Module und -Handler in system.webAND registrieren musste 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>

Aus irgendeinem Grund arbeitete ELMAH für mich auf einem anderen Server. Was seltsam ist, da es mit unserem identisch sein sollte, aber wir haben nur system.webserver-Deklarationen.
— Maximillian

2
Danke, das hat mir wirklich geholfen.
— Stimms

1
Erstaunlich, diese Antwort hat mir viel Zeit gespart.
— Chris F

22
Stellen Sie für diejenigen unter Ihnen, die von system.web zu system.webserver ausschneiden und einfügen, sicher, dass Sie das Attribut name im Abschnitt Handler hinzufügen.
— Jason Watts

2
Danke, es hat bei mir funktioniert. Aber ist das ein Fehler? <system.web>soll für IIS6 sein, während <system.webServer>für IIS7 + per stackoverflow.com/questions/355261/…
— DeepSpace101

120

Möglicherweise benötigen Sie diesen auch

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

wenn du bekommst

403 - Verboten: Zugriff verweigert. Sie haben keine Berechtigung, dieses Verzeichnis oder diese Seite mit den von Ihnen angegebenen Anmeldeinformationen anzuzeigen.


1
Dies tat es für mich, nachdem ich den Beitrag von eyesnz überprüft hatte.
— CitizenBane

4
Ja, aber vergessen Sie nicht, diese Seite durch Authentifizierung zu sichern. Ansonsten kann jeder Ihre Protokolle lesen.
— DriAn

Nun ja. 404 wird "nicht gefunden", aber meistens, wenn Sie 404 als markierte Antwort festlegen, erhalten Sie normalerweise 403.
— Jirapong

3
Sie müssen hinzufügen unter sectiongroup name = "elmah" <section name = "security" requirePermission = "false" type = "Elmah.SecuritySectionHandler, Elmah" />
— Mhmd

Sie müssen dies nach dem </ configSections> -Tag hinzufügen
— Karl Glennon

12

Diese Zeile fehlte bei der Installation mit 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>

Durch Hinzufügen wurde das 404-Fehlerproblem behoben.


Das hat auch bei mir absolut funktioniert. Danke Peter.
— Lee Englestone

Dies war das Update für mich, ich bin auch auf vs 2013, iis8.0, verwendet Nuget zu installieren.
— James Bailey

Dies hat es für mich in VS 2015 auf localhost im Debug behoben, nachdem ich nuget zur Installation von ELMAH verwendet hatte.
— SenseiHitokiri

Ich hatte das auch. Ich habe ein Problem mit dem Projekt github.com/alexbeletsky/elmah-mvc/issues/89
— m.edmondson

Arbeitete auch für mich
— Dragos Durlut

11

Eine Möglichkeit, dies heute zu umgehen, ist die Verwendung von Nuget.

Visual Studio: Menü-> Tools-> Bibliothekspaketmanager-> Paketmanagerkonsole

install-package elmah

HTH


nuget macht Entwicklern das Leben wirklich leichter.
— TheVillageIdiot

Habe mich auf meiner web.config gut geschlagen
— Benj Sanders

9

Das Nuget-Paket fügt web.config nicht die folgenden wichtigen Zeilen hinzu, was zu einem 403-Fehler führt.

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

Möglicherweise möchten Sie auch den Zugriff auf Fehlerprotokolle durch einschränken

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

0

Wenn Sie Bereiche verwenden, stellen Sie sicher, dass Sie einen der Appsetting-Schlüssel aktualisiert haben

Standard

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

Wenn Sie ein Bereich als Admin sind

<add key="elmah.mvc.route" value="admin/elmah" />
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.