GAC中Elmah的问题

时间:2011-08-16 19:33:47

标签: asp.net elmah

我试图关注这篇文章: 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中安装了模块和处理程序,现在它可以正常工作。

4 个答案:

答案 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处理程序和各种模块。

相关问题