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.