2009-06-01 28 views
78

Tôi đã cố gắng sử dụng elmah với trang asp.net của tôi nhưng bất cứ khi nào tôi cố gắng truy cập vào 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 đưa ra dưới đây.Elmah không làm việc với trang asp.net

<?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="[email protected]" 
       to="myself" 
       subject="ERROR From Elmah:" 
       async="true" 
       smtpPort="587" 
       smtpServer="smtp.gmail.com" 
       userName="[email protected]" 
       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> 

EDIT: ELMAH = (Lỗi Logging Modules và Handlers)
http://code.google.com/p/elmah/

+1

Aman: Bạn đang giả định 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 chữa nó, nếu nó không phải là trường hợp. – shahkalpesh

+0

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 là nó hoạt động. – shahkalpesh

+1

Xem việc này có hữu ích không - http://msdn.microsoft.com/en-us/library/aa479332.aspx – shahkalpesh

Trả lời

28

Hãy thử đăng ký Modules và Handlers 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> 
+0

Yippe hoạt động của nó !!! Nó xảy ra với tôi cũng để đặt nó ở đó nhưng tôi đã không nhìn thấy nó trong bất kỳ giải pháp blog trực tuyến vv vì vậy tôi đã được bit loại nhút nhát để làm điều đó. – TheVillageIdiot

152

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 phải đăng ký Modules ELMAH và Handlers trong system.websystem.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> 
+0

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

+2

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

+1

Tuyệt vời, câu trả lời này đã giúp tôi tiết kiệm thời gian lớn. –

119

Có thể bạn đang cần cái này cũng

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

khi bạn nhận được

403 - Forbidden: 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 cách sử dụng thông tin đăng nhập mà bạn đã cung cấp.

+1

Điều này đã làm cho tôi sau khi xác minh bài viết của eyesnz. – CitizenBane

+1

@Jirapong, Cảm ơn bạn rất nhiều. Nó làm việc cho tôi. Hoho ... –

+4

Yea 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

10

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

Visual studio: Menu-> Tools-> gói thư viện Manager-> quản lý gói giao diện điều khiển

install-package elmah 

HTH

+0

nuget thực sự làm cho các nhà phát triển trở nên dễ dàng hơn. – TheVillageIdiot

+2

Nó thực hiện một mớ hỗn độn của web.config của tôi. –

+0

Đã làm tốt trên web.config của tôi –

9

Các gói NuGet không thêm những dòng quan trọng sau đây để web.config kết quả là 403 lỗi.

<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 các bản ghi 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" /> 
12

Dòng này đã mất tích 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.

+0

Điều này hoàn toàn phù hợp với tôi. Cảm ơn Peter. –

+0

Đây là bản sửa lỗi cho tôi, tôi cũng đang dùng so với 2013, iis8.0, đã sử dụng nuget để cài đặt. –

+0

Điều này cố định 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

0

nếu bạn đang sử dụng khu vực chắc chắn rằng bạn đã cập nhật một trong những appsetting chính

Mặc định

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

Nếu bạn là một khu vực như quản trị

<add key="elmah.mvc.route" value="admin/elmah" /> 
Các vấn đề liên quan