问题
I\'ve tried to use elmah with my asp.net site but whenever I try to go to http://localhost:port/elmah.axd I get resource not found exception. My web.config is given below.
<?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>
EDIT: Elmah = (Error Logging Modules and Handlers)
http://code.google.com/p/elmah/
回答1:
Try registering the Modules and Handlers in the sections "httphandlers" and "httpmodules" in the <system.web>
section:
<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>
回答2:
I just had a similar problem with Elmah not working in an IIS7 deployment. I found that I needed to register the Elmah Modules and Handlers in system.web
AND 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>
回答3:
You may be need this one also
<elmah>
<security allowRemoteAccess="1" />
</elmah>
when you get
403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.
回答4:
This line was missing when I installed using 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>
Adding it solved the 404 error problem.
回答5:
One way to get around it today is to use nuget.
Visual studio:menu->tools->library package manager->package manager console
install-package elmah
HTH
回答6:
The nuget package does not add the following important lines to web.config resulting in 403 error.
<configuration>
<elmah>
<security allowRemoteAccess="1" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/app_data/elmah" />
</elmah>
</configuration>
Also you may want to restrict the access to error logs by
<add name="Elmah" verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
回答7:
if you are using Areas make sure that you have updated one of the appsetting key
Default
<add key="elmah.mvc.route" value="elmah" />
If you are an area as Admin
<add key="elmah.mvc.route" value="admin/elmah" />
来源:https://stackoverflow.com/questions/933554/elmah-not-working-with-asp-net-site