【问题标题】:How to configure ELMAH to work with Windows Azure? I get a 404 on Elmah.axd如何配置 ELMAH 以使用 Windows Azure?我在 Elmah.axd 上得到 404
【发布时间】:2010-10-30 16:48:21
【问题描述】:

我有一个在 Windows Azure 上运行的 ASP.NET MVC Web 角色,并且在 web.config 中正确设置了 ELMAH。我也有我的 global.asax 忽略 *.axd 路线。在本地,我可以加载 /elmah.axd,但是当我部署到 Azure 时,我在该页面上得到 404。有人让 ELMAH 在 Azure 上工作吗?

【问题讨论】:

标签: asp.net asp.net-mvc azure elmah


【解决方案1】:

Azure 基于 Windows Server 2008 和 IIS7。这意味着您需要填充 web.config 文件的 system.webServer 部分。

elmah 源代码中包含的示例文件包含您需要输入的详细信息。

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
    <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="ErrorLog" type="Elmah.ErrorLogModule, 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" type="Elmah.ErrorLogPageFactory, Elmah" />
  </handlers>
</system.webServer>

上述 xml 块中有 2 行 elmah 行需要包含在内,而且该部分通常应该包含大部分(如果不是全部)这些元素。

编辑:不再需要,因为现在默认启用:

为了使 Elmah 工作,您还需要修改 ServiceDefinition.csdef 文件中的以下行:

<WebRole name="WebRole" enableNativeCodeExecution="true">

【讨论】:

  • 我让它在我的 Vista PC 上本地运行,但在实时服务器上它无法运行,直到我添加了您在 web.config 底部提到的 2 条 Elmah 行。不过,我不必进入 ServiceDefinition 文件。完成这些更改后,我收到 403 错误,这就是为什么您需要将 allowRemoteAccess 设置为 1
  • 除此之外,我正在使用 2012 年 10 月的 Azure SDK,发现我只需要 (1) 条目和 (2)上述答案中提到的 .csdef 条目。此外,与标准 MVC Web 应用程序相比,您可以使用 Azure MVC Web 角色通过“/elmah”(取决于您的 elmah.mvc.route 配置)访问 elmah,它将是“/elmah/elmah.axd”。祝你好运。
  • enableNativeCodeExecution 默认设置为 true:msdn.microsoft.com/en-us/library/windowsazure/gg557553.aspx
  • @BrianOgden:它以前没有回到 Azure 的第一个版本中。我会更新分析器
【解决方案2】:

同时保护文件,以便只有允许的用户才能查看错误日志!

<location path="admin/elmah.axd">
    <system.web>
        <authorization>
            <allow roles="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>

【讨论】:

  • 有一个 web.config 选项: 应该解决这个问题。
【解决方案3】:

我认为另外(根据@mat1t here 的建议)您可能需要将远程访问设置为 1:

<elmah>
<security allowRemoteAccess="0" />
..............
..............
</elmah>

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2015-01-18
    • 2011-01-08
    • 2019-12-18
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多