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.