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

ハンドラー/モジュールをIISレベルで登録する必要があるかもしれませんが、それが機能するためだと思います。
shahkalpesh 2009年

1
このことができます参照してください- msdn.microsoft.com/en-us/library/aa479332.aspx
shahkalpesh

@shahkalpeshに感謝します。私は本当に仕事に圧倒されています!この質問は他の人にも役立つかもしれないと思いましたが、コミュニティwikiにしました。
TheVillageIdiot 2009年

奇妙ですが、私は運が悪かった提案を試しました!最悪の場合、アクセスしようとする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 2009年

153

ElmahがIIS7デプロイメントで機能しないという同様の問題が発生しました。ELmahモジュールとハンドラーをsystem.webANDに登録する必要があることがわかりました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 2009

1
驚くべきことに、この答えは私に大きな時間を節約しました。
クリスF

22
system.webからsystem.webserverに切り取りと貼り付けを行う場合は、ハンドラーセクションにname属性を追加してください。
ジェイソンワッツ2010年

2
おかげで、それは私のために働いた。しかし、これはバグですか?stackoverflow.com/questions/355261/ごとにIIS7 +用であるの<system.web>に対し、IIS6用であると想定されています…<system.webServer>
DeepSpace101 2012年

120

これも必要かもしれません

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

あなたが取得するとき

403-禁止:アクセスが拒否されました。指定した資格情報を使用してこのディレクトリまたはページを表示する権限がありません。


1
これは、eyesnzの投稿を確認した後、私のためにそれを行いました。
CitizenBane 2010年

4
はい、しかし認証を介してそのページを保護することを忘れないでください。それ以外の場合は、誰でもログを読み取ることができます。
driAn 2010年

はい、そうです。404「が見つかりません」されていますが、マークされた答えとして404を修正する際、主に、あなたは通常403だ
Jirapong

3
セクション
Mhmd 2011

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

これは私にとっての修正でした。私もvs2013、iis8.0を使用して、nugetを使用してインストールしました。
James Bailey

これにより、nugetを使用してELMAHをインストールした後、デバッグ中のローカルホスト上のVS2015で修正されました。
SenseiHitokiri 2016年

私もこれを持っていました。私は、プロジェクトと問題提起しましたgithub.com/alexbeletsky/elmah-mvc/issues/89
m.edmondson

私のためにも働いた
Dragos Durlut 2017

11

今日それを回避する1つの方法は、nugetを使用することです。

Visual Studio:メニュー->ツール->ライブラリパッケージマネージャー->パッケージマネージャーコンソール

install-package elmah

HTH


nugetは、開発者の生活を本当に楽にしてくれます。
TheVillageIdiot 2011

私のweb.configで問題なく動作しました
Benj Sanders 2016

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

エリアを使用している場合は、アプリ設定キーの1つを更新したことを確認してください

デフォルト

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