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/

TheVillageIdiot
quelle
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
1
Sehen Sie, ob dies hilft - msdn.microsoft.com/en-us/library/aa479332.aspx
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>
Dan
quelle
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>
eynz
quelle
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.

Jirapong
quelle
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.

Peter Gluck
quelle
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

LosManos
quelle
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" />
Prafulla
quelle
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" />
akd
quelle