Elmah không làm việc với trang asp.net


80

Tôi đã cố gắng sử dụng elmah với trang web asp.net của mình nhưng bất cứ khi nào tôi cố truy cập http: // localhost: port / elmah.axd, tôi nhận được tài nguyên không tìm thấy ngoại lệ. Web.config của tôi được cung cấp bên dưới.

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

CHỈNH SỬA: Elmah = (Mô-đun ghi nhật ký lỗi và trình xử lý)
http://code.google.com/p/elmah/


1
Aman: Bạn đang cho rằng mọi người đều biết ELMAH là gì. Tôi đã chỉnh sửa câu hỏi để cung cấp liên kết. Sửa nó, nếu nó không phải là trường hợp.
shahkalpesh

Tôi đoán bạn có thể phải đăng ký trình xử lý / mô-đun ở cấp IIS, tôi đoán để nó hoạt động.
shahkalpesh

1
Xem liệu điều này có hữu ích không - msdn.microsoft.com/en-us/library/aa479332.aspx
shahkalpesh

Cảm ơn @shahkalpesh. Tôi thực sự choáng ngợp với công việc! Mặc dù tôi nghĩ câu hỏi này cũng có thể giúp ích cho những người khác và làm cho nó trở thành wiki cộng đồng.
TheVillageIdiot

Kỳ lạ nhưng tôi đã thử các đề xuất mà không may mắn! Tệ nhất là khi tôi cố gắng truy cập elmah.axd, IIS bị treo.

Câu trả lời:


28

Hãy thử đăng ký Mô-đun và Trình xử lý trong các phần "httphandlers" và "httpmodules" trong <system.web>phần:

    <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 nó đang hoạt động !!! Tôi cũng nghĩ đến việc đặt nó ở đó nhưng tôi chưa thấy nó trong bất kỳ giải pháp blog trực tuyến nào, v.v. nên tôi hơi ngại khi làm điều đó.
TheVillageIdiot

153

Tôi vừa gặp sự cố tương tự với Elmah không hoạt động trong triển khai IIS7. Tôi thấy rằng tôi cần đăng ký Mô-đun và Trình xử lý Elmah trong 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>

Vì một số lý do, điều này đã khiến ELMAH làm việc cho tôi trên một máy chủ khác. Thật kỳ lạ, vì nó phải giống với của chúng ta, nhưng chúng ta chỉ có khai báo system.webserver.
Maximillian

2
Cảm ơn, điều đó thực sự đã giúp tôi.
stimms

1
Thật tuyệt vời, câu trả lời này đã giúp tôi tiết kiệm rất nhiều thời gian.
Chris F,

22
đối với những người bạn cắt và dán từ system.web sang system.webserver, hãy đảm bảo bạn thêm thuộc tính name trong phần trình xử lý.
Jason Watts

2
Cảm ơn, nó đã làm việc cho tôi. Nhưng đây có phải là một lỗi? <system.web>được cho là dành cho IIS6 trong khi <system.webServer>dành cho IIS7 + mỗi stackoverflow.com/questions/355261/…
DeepSpace101,

120

Bạn cũng có thể cần cái này

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

khi bạn nhận được

403 - Bị cấm: Quyền truy cập bị từ chối. Bạn không có quyền xem thư mục hoặc trang này bằng thông tin đăng nhập mà bạn đã cung cấp.


1
Điều này đã làm điều đó cho tôi sau khi xác minh bài đăng của eyesnz.
CitizenBane

4
Đúng, nhưng đừng quên bảo mật trang đó thông qua xác thực. Nếu không, bất kỳ ai cũng có thể đọc nhật ký của bạn.
driAn 3/10/10

Vâng, Vâng. 404 là "không tìm thấy" nhưng chủ yếu là khi bạn khắc phục 404 là câu trả lời được đánh dấu bạn thường có 403.
Jirapong

3
bạn cần thêm dưới tên sectiongroup = "elmah" <section name = "security" RequiPermission = "false" type = "Elmah.SecuritySectionHandler, Elmah" />
Mhmd

Bạn cần phải thêm này sau thẻ </ configSections>
Karl Glennon

12

Dòng này bị thiếu khi tôi cài đặt bằng 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>

Thêm nó đã giải quyết được vấn đề lỗi 404.


Điều này hoàn toàn làm việc cho tôi. Cảm ơn Peter.
Lee Englestone

Đây là bản sửa lỗi cho tôi, tôi cũng đang sử dụng phiên bản 2013, iis8.0, được sử dụng nuget để cài đặt.
James Bailey,

Điều này đã sửa nó cho tôi trong VS 2015 trên localhost trong gỡ lỗi sau khi sử dụng nuget để cài đặt ELMAH.
SenseiHitokiri

Tôi cũng đã có cái này. Tôi đã nêu vấn đề với dự án github.com/alexbeletsky/elmah-mvc/issues/89
m.edmondson

Làm việc cho tôi là tốt
Dragos Durlut

11

Một cách để giải quyết vấn đề ngày nay là sử dụng nuget.

Visual studio: menu-> công cụ-> trình quản lý gói thư viện-> bảng điều khiển trình quản lý gói

install-package elmah

HTH


nuget thực sự đang làm cho cuộc sống của các nhà phát triển dễ dàng hơn.
TheVillageIdiot

Làm tốt trên web của
tôi.config

9

Gói nuget không thêm các dòng quan trọng sau vào web.config dẫn đến lỗi 403.

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

Ngoài ra, bạn có thể muốn hạn chế quyền truy cập vào nhật ký lỗi bằng cách

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

0

nếu bạn đang sử dụng Khu vực, hãy đảm bảo rằng bạn đã cập nhật một trong các khóa cài đặt ứng dụng

Mặc định

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

Nếu bạn là một khu vực với tư cách là Quản trị viên

<add key="elmah.mvc.route" value="admin/elmah" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.