Elmah不与asp.net站点一起使用


80

我试图在我的asp.net网站上使用elmah,但是每当我尝试访问http:// localhost:port / elmah.axd时,我都找不到资源异常。我的web.config如下。

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

编辑:Elmah =(错误记录模块和处理程序)
http://code.google.com/p/elmah/


1
阿曼:您假设每个人都知道什么是ELMAH。我已经编辑了问题以提供链接。如果不是这样,请更正它。
shahkalpesh

我想您可能必须在IIS级别上注册处理程序/模块,我想它才能正常工作。
shahkalpesh


谢谢@shahkalpesh。我真的不知所措!虽然我认为这个问题可能也对其他人有所帮助,但使它成为社区Wiki。
TheVillageIdiot

很奇怪,但我没有运气就尝试了这些建议!最糟糕的是,当我尝试访问时elmah.axd,IIS挂起。

Answers:


28

尝试在该部分的“ httphandlers”和“ httpmodules”部分中注册模块和处理程序<system.web>

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

pp其工作!!!我也想把它放在那里,但是我在任何在线博客解决方案中都没有看到它,所以我有点害羞。
TheVillageIdiot

153

我只是遇到了类似的问题,Elmah无法在IIS7部署中工作。我发现我需要在system.webAND中注册Elmah模块和处理程序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>

由于某种原因,这使ELMAH在另一台服务器上为我工作。这很奇怪,因为它应该与我们的相同,但是我们只有system.webserver声明。
Maximillian

2
谢谢,这真的帮助了我。
stimms

1
太神奇了,这个答案节省了我很多时间。
克里斯·F

22
对于那些从system.web剪切和粘贴到system.webserver的用户,请确保在处理程序部分中添加name属性。
杰森·沃茨

2
谢谢,对我有用。但这是一个错误吗?<system.web>被认为是对IIS6而<system.webServer>为IIS7 +每stackoverflow.com/questions/355261/...
DeepSpace101

120

您可能还需要这个

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

当你拿到时

403-禁止访问:拒绝访问。您无权使用您提供的凭据查看此目录或页面。


1
在验证了eyesnz的帖子之后,这对我来说是成功的。
CitizenBane 2010年

4
是的,但不要忘记通过身份验证来保护该页面。否则,任何人都可以阅读您的日志。
德里安

嗯,是。404“找不到”,但大多数时候,您修复404标明答案你平时有403
Jirapong

3
您需要在sectiongroup name =“ elmah”下添加 <section name =“ security” requirePermission =“ false” type =“ Elmah.SecuritySectionHandler,Elmah” />
Mhmd 2011年

您需要在</ configSections>标记之后添加此内容
Karl Glennon 2012年

12

当我使用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>

添加它解决了404错误问题。


这对我也绝对有效。谢谢彼得。
Lee Englestone 2014年

这是对我的解决方法,我也在vs 2013 iis8.0上使用nuget进行安装。
詹姆斯·贝利

这在使用nuget安装ELMAH之后在VS 2015的localhost上为我修复了它。
SenseiHitokiri '16


也为我工作
Dragos Durlut

11

解决这个问题的一种方法是使用nuget。

Visual Studio:菜单->工具->库包管理器->包管理器控制台

install-package elmah

高温超导


nuget确实使开发人员的生活更轻松。
TheVillageIdiot 2011年

在我的web.config上
做得

9

nuget软件包未将以下重要行添加到web.config中,从而导致403错误。

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

另外,您可能希望通过以下方式限制对错误日志的访问:

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

0

如果您使用的是Areas,请确保已更新appsetting密钥之一

默认

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

如果您是管理员区域

<add key="elmah.mvc.route" value="admin/elmah" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.