Elmah not working with asp.net site

微笑、不失礼 提交于 2019-11-26 07:54:54

问题


I\'ve tried to use elmah with my asp.net site but whenever I try to go to http://localhost:port/elmah.axd I get resource not found exception. My web.config is given below.

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

EDIT: Elmah = (Error Logging Modules and Handlers)
http://code.google.com/p/elmah/


回答1:


Try registering the Modules and Handlers in the sections "httphandlers" and "httpmodules" in the <system.web> section:

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



回答2:


I just had a similar problem with Elmah not working in an IIS7 deployment. I found that I needed to register the Elmah Modules and Handlers in system.web AND 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>



回答3:


You may be need this one also

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

when you get

403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.




回答4:


This line was missing when I installed using 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>

Adding it solved the 404 error problem.




回答5:


One way to get around it today is to use nuget.

Visual studio:menu->tools->library package manager->package manager console

install-package elmah

HTH




回答6:


The nuget package does not add the following important lines to web.config resulting in 403 error.

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

Also you may want to restrict the access to error logs by

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



回答7:


if you are using Areas make sure that you have updated one of the appsetting key

Default

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

If you are an area as Admin

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


来源:https://stackoverflow.com/questions/933554/elmah-not-working-with-asp-net-site

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!