我试图关注这篇文章: http://www.codeproject.com/KB/aspnet/elmahGAC.aspx
让Elmah从GAC工作,而不是需要为每个应用程序单独设置。一切都在本地工作,但当全局设置时,Elmah停止记录。我在某处读到,如果Elmah从GAC运行,那么设置应该在“global”machine.config和“global”web.config中,但我已经尝试过了。现在,如果我添加这个,我就处于这样的地步:
<system.webServer>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=abc123" preCondition="managedHandler" />
</modules>
</system.webServer>
进入我的应用程序的web.config,它从全局machine.config中获取其余设置并成功登录。要回答这个显而易见的问题,是的,我在全局machine.config中有这个部分,甚至尝试在全局的web.config中输入它,但仍然无法记录日志。有人有主意吗?反正有没有让Elmah显示错误而不是安静地失败?
编辑:这是我的“全局”machine.config文件。它只是默认的一个,添加了ELMAH的东西,并取出了一些部分组来满足char限制。我可能还应该注意到这是在IIS7中运行。
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
</sectionGroup>
</configSections>
<connectionStrings>
<clear />
<add name="Elmah.Sql" connectionString="IMNOTTELLING" providerName="System.Data.SqlClient" />
<add name="LocalSqlServer" connectionString="IMNOTTELLING" providerName="System.Data.SqlClient" />
</connectionStrings>
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.SqlErrorLog, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" connectionStringName="Elmah.Sql" />
</elmah>
<runtime />
<system.data>
<DbProviderFactories />
</system.data>
<system.serviceModel>
Nothing tampered with here
</system.serviceModel>
<system.web>
<processModel autoConfig="true"/>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
</httpHandlers>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
</httpModules>
<compilation>
<assemblies>
<add assembly="Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" />
</assemblies>
</compilation>
<membership>
Nothing tampered with here
</membership>
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/"
type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</profile>
<roleManager>
Nothing tampered with here
</roleManager>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests ="true">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" preCondition="managedHandler" />
</modules>
<handlers>
<add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah, Version=1.2.13605.0, Culture=neutral, PublicKeyToken=e50dbdd41da277ac" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
编辑:我直接在IIS中安装了模块和处理程序,现在它可以正常工作。
答案 0 :(得分:1)
我在Win7x64安装上遇到IIS7问题(测试生产系统)。我终于通过将模块和处理程序放入applicationHost.config
文件中的相应节点来实现这一点。
C:\Windows\System32\inetsrv\config\applicationHost.config
似乎IIS7忽略了主框架web.config
文件的某些区域,而是使用applicationHost.config
文件进行IIS设置。
如果您使用64位安装,请注意该文件:似乎32位应用程序(包括Visual Studio)似乎看不到该文件。这是因为操作系统是64位的一些文件系统行为。一个简单的解决方法是使用UNC路径打开它:
\\localhost\c$\Windows\System32\inetsrv\config\applicationHost.config
答案 1 :(得分:0)
我真的怀疑Elmah的PublicKeyToken是 abc123 ...您需要使用真正的PublicKeyToken,如果您查看GAC中的程序集,可以找到它。它看起来像:b03f5f7f11d50a3a(用于mscorlib.dll,因此这是Microsoft的公钥令牌)。
答案 2 :(得分:0)
编辑:我直接在IIS中安装了模块和处理程序,现在它可以正常工作。
答案 3 :(得分:0)
我已经尝试了所有我能找到的东西让我的Win7 Ultimate 64bit机器上的GMA从GAC工作,唯一能让它工作的就是在IIS管理器中注册elmah.axd处理程序和各种模块。