【问题标题】:Problem with Elmah in the GACGAC 中 Elmah 的问题
【发布时间】:2011-10-28 09:00:36
【问题描述】:

我正在尝试关注这篇文章: http://www.codeproject.com/KB/aspnet/elmahGAC.aspx

让 Elmah 从 GAC 工作,而不是需要为每个应用程序单独设置。一切都在本地工作,但是当设置全局设置时,Elmah 停止记录。我在某处读到,如果 Elmah 从 GAC 运行,那么设置应该在“全局”machine.config 与“全局”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 的内容,并取出了一些部分组以满足字符限制。我可能还应该注意到这是在 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 中安装了模块和处理程序,现在它可以工作了。

【问题讨论】:

    标签: asp.net elmah


    【解决方案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

    【讨论】:

      【解决方案2】:

      我真的怀疑Elmah的PublicKeyToken是abc123...你需要使用真正的PublicKeyToken,你可以在GAC中查看程序集找到。它看起来像:b03f5f7f11d50a3a(用于 mscorlib.dll,因此是 Microsoft 的公钥令牌)。

      【讨论】:

      • 将模块声明放在哪个文件中并不重要,只要它位于 system.WebServer/modules 部分即可。把DLL放到app的bin文件夹下能用吗?
      • 所以它与 DLL 是否在 GAC 中没有任何关系,那么......如果你先清空 ASP.NET 临时文件,Fusion Log Viewer 会告诉你什么?跨度>
      • 它是空白的。大会肯定是由 GAC 开展的。它只需要应用程序级别的代码简介即可运行。对我来说,这表明“全局” machine.config 或 web.config 文件中的某个地方存在问题,但我不知道是什么……顺便说一句,非常感谢您的帮助。
      【解决方案3】:

      编辑:我直接在 IIS 中安装了模块和处理程序,现在它可以工作了。

      【讨论】:

        【解决方案4】:

        我已经尽我所能在我的 Win7 Ultimate 64 位机器上通过 GAC 让 ELMAH 工作,唯一最终让它工作的是在 IIS 管理器中注册 elmah.axd 处理程序和各种模块。

        【讨论】:

          猜你喜欢
          • 2010-11-14
          • 1970-01-01
          • 1970-01-01
          • 2010-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          相关资源
          最近更新 更多