我正在构建一个新的 Web Forms aspnet 4.0 网站,并使用 NuGet 安装了 Elmah 1.2。我在 web.config 中添加了一行以登录到 sql server express,并创建了相关表和 3 个存储过程。本地(Win 7/ IIS 7.5)一切正常(当通过 vs2010 开发服务器和我的本地 IIS 运行时)-我可以点击 elmah.axd/test 然后返回到 elmah.axd ,果然,我的错误已被记录。
然后,我将该网站发布到我们的开发服务器(Win 2008 R2/ IIS 7.5)。如果我点击 elmah.axd,它会告诉我没有错误 - 然后我转到 elmah.axd/test 并返回 Elmah,仍然没有错误。如果我将日志记录切换到内存而不是 SQL,一切都会正常工作。
我已向应用程序池用户添加了站点中所有存储过程的执行权限。我什至创建了一个名为 ElmahConnString 的单独连接字符串,以 SA 身份登录 - 仍然没有运气。 (我尝试从 sa 中删除 a 以确保它损坏,果然它损坏了 - 所以它肯定使用了 conn 字符串)。
我的 Web 配置如下所示(大部分都放在我的 NuGet 中!);
<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>
...
<connectionStrings>
<add name="ConnString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SiteData;Integrated Security=True" />
</connectionStrings>
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ConnString" />
<security allowRemoteAccess="yes" requirePermission="false"/>
</elmah>
...
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
...
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorTweet" type="Elmah.ErrorTweetModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
<add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
</system.webServer>
您会注意到,这包含了该问题最广泛给出的答案,即底部的 system.web 服务器块:'(
我不明白?我缺少什么?