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
Aman : 당신은 모두가 ELMAH가 무엇인지 알고 있다고 가정하고 있습니다. 링크를 제공하기 위해 질문을 편집했습니다. 그렇지 않은 경우 수정하십시오.
— shahkalpesh

IIS 수준에서 처리기 / 모듈을 등록해야 할 수도 있다고 생각합니다.
— shahkalpesh

1
이 도움이 있는지 확인 - msdn.microsoft.com/en-us/library/aa479332.aspx
— shahkalpesh

감사합니다 @shahkalpesh. 정말 일에 압도됩니다! 이 질문이 다른 사람들에게도 도움이 될 것이라고 생각했지만 커뮤니티 위키로 만들었습니다.
— TheVillageIdiot 2009-06-01

이상하지만 운이없는 제안을 시도했습니다! 최악의 경우에 액세스하려고 elmah.axd하면 IIS가 중단됩니다.

답변:


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>

Yippe의 작동 !!! 거기에 그것을 두는 것도 나에게 발생했지만 온라인 블로그 솔루션 등에서는 보지 못했기 때문에 약간 부끄러워했습니다.
— TheVillageIdiot

153

IIS7 배포에서 작동하지 않는 Elmah와 비슷한 문제가 있습니다. 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
놀랍습니다.이 답변은 저에게 큰 시간을 절약했습니다.
— Chris F

22
system.web에서 system.webserver로 잘라내어 붙여 넣는 경우에는 handlers 섹션에 name 속성을 추가해야합니다.
— Jason Watts

2
고마워요. 하지만 이것은 버그입니까? <system.web>IIS6 용이고 <system.webServer>IIS7 + 용입니다. stackoverflow.com/questions/355261/…
— DeepSpace101

120

이것도 필요할 수 있습니다.

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

당신이 얻을 때

403-금지됨 : 액세스가 거부되었습니다. 제공 한 자격 증명을 사용하여이 디렉터리 또는 페이지를 볼 수있는 권한이 없습니다.


1
eyesnz의 게시물을 확인한 후 이것은 나를 위해했습니다.
— CitizenBane

4
예,하지만 인증을 통해 해당 페이지를 보호하는 것을 잊지 마십시오. 그렇지 않으면 누구나 로그를 읽을 수 있습니다.
— driAn

네, 그렇습니다. 404 "을 (를) 찾을 수 없습니다"되어 있지만 표시 응답으로 404를 해결 주로 할 때 보통 403 있어요
— Jirapong

3
섹션
— Mhmd

</ configSections> 태그 뒤에 추가해야합니다
— Karl Glennon

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 년

이것은 나를위한 수정 사항이었고 2013, iis8.0, 설치에 nuget을 사용했습니다.
— James Bailey

이것은 너겟을 사용하여 ELMAH를 설치 한 후 디버그의 localhost에서 VS 2015에서 나를 위해 수정했습니다.
— SenseiHitokiri

나도 가지고 있었다. 나는 프로젝트 github.com/alexbeletsky/elmah-mvc/issues/89에
— m.edmondson 2016

저를 위해 일했습니다
— Dragos Durlut 2017-08-23

11

오늘 그것을 우회하는 한 가지 방법은 너겟을 사용하는 것입니다.

Visual Studio : 메뉴-> 도구-> 라이브러리 패키지 관리자-> 패키지 관리자 콘솔

install-package elmah

HTH


nuget은 개발자의 삶을 더 쉽게 만들어줍니다.
— TheVillageIdiot 2011-07-15

내 web.config에서 잘 했어요
— Benj Sanders

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" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.