【问题标题】:How to Get Error Details of an ASP.NET 5 app deployed on Azure Websites?如何获取部署在 Azure 网站上的 ASP.NET 5 应用程序的错误详细信息?
【发布时间】:2015-04-08 15:02:14
【问题描述】:

我有一个带有网站和几个项目库的 ASP.NET 5 解决方案。我正在使用 MVC 6 和 Entity Framework 7。该应用程序在本地运行良好,直到今天它还在作为 Azure 网站部署的 Azure 上运行。

但是今天在 Azure 上进行最新部署后,我在启动时收到了这样的错误 500(在本地仍然可以正常工作):

我试图通过以下方式获取更多详细信息:

  • 使用中间件诊断
  • 在 web.config 文件中添加 customError / httpError 设置
  • 下载生成的DetailedError页面

似乎在启动/配置步骤期间发生了错误/异常,但我仍然得到没有详细信息的通用错误页面。即使是在服务器上生成的版本(DetailedErrors 文件夹)我也得到了这个:

我启用了失败的请求跟踪,但仍然没有有用的信息:

即使我在 Startup/Configure 中删除代码并按照建议添加 try/catch,我也会得到相同的错误,但没有详细信息。这似乎是一个配置/编译问题,但在没有任何信息的情况下很难调试。

【问题讨论】:

  • 在 beta 5 中有这方面的消息吗?

标签: asp.net azure-web-app-service


【解决方案1】:

您必须在 web.config 文件中将应用设置属性 ASPNET_DETAILED_ERRORS 设置为 true

我编辑的 web.config 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta6" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta6" />
    <add key="dnx-clr" value="clr" />
    <add key="dnx-app-base" value="..\approot\src\MyApp" />
    <!-- This will turn on detailed errors when deployed to remote servers -->
    <!-- This setting is not recommended for production -->
    <add key="ASPNET_DETAILED_ERRORS" value="true" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5.1" />
  </system.web>
</configuration>

【讨论】:

  • 这在 beta-8 中仍然有效吗?修改了发布的 wwwroot 中的 web.config,但没有额外的事件日志或详细错误信息。
  • 因为设置名称是ASPNETCORE_DETAILEDERRORS。参考:docs.microsoft.com/en-us/aspnet/core/fundamentals/host/…。但这是针对 ASP.NET Core,而问题是针对 ASP.NET
【解决方案2】:

在 Azure 中运行应用程序时,ASPNET5 应用程序启动时发生的错误很难追踪(至少在 beta 3 中)。希望他们能找到改善体验的方法。我不得不求助于将我的启动剥离到最基本的部分,然后逐行添加代码,直到发生故障(在我的情况下,它是一个缺少的环境变量)。

我也使用过这样的代码(仅用于调试),这可能会有所帮助,具体取决于错误发生的位置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env )
    {           
        try
        {                       
            // Add MVC to the request pipeline.
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action}/{id?}"
                   );
            });
        }

//exceptions in startup are really bad when running in azure, all you will get is an internal server error
//this code will write the exception message to the browser instead.  Only use for debugging!!!

      catch (Exception ex)          
      {
            app.Run(async context =>
            {
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync(ex.Message);
            });
        }
    }

2016 年 10 月 27 日更新 与我最初的回答相比,发生了很多变化。最新指南发布在此处:

https://docs.asp.net/en/latest/fundamentals/hosting.html

所以,添加:

.CaptureStartupErrors(true) 和 .UseSetting(WebHostDefaults.DetailedErrorsKey, "true") 在您的 WebHostBuilder 上,如下所示:

 var host = new WebHostBuilder()
            .CaptureStartupErrors(true)
            .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

【讨论】:

  • 感谢 Nelson,这就是我在用尽所有“经典”调试解决方案后要做的事情。如果 MSFT 的任何人可以回答这个问题,我将等待。
  • 我试图删除所有代码并使用 try/catch 但还没有运气:( 看不到任何细节有点令人沮丧
  • 我还缺少一个环境变量。请注意,将键添加到 azure 配置表是不够的,我还需要添加值。这是一个 clientId 和 clientSecret。
  • 这似乎不再起作用了。相反,异常被完全吞没,控制权转移到我的 MVC 控制器。 (因为 Configure() 失败,所以效果不佳。)
  • 感谢更新!我在试图弄清楚 startup.cs 中的所有内容时迷失了方向,甚至没有想过我可以对主机做什么。如果你停下来思考的时间足够长,就会很有意义。
【解决方案3】:

在 RC1(可能是 beta8)中,显然应该使用:

app.UseDeveloperExceptionPage();

.. 这显然只有在 app.Properties["host.AppMode"]"development" 时才有效。

但这对我不起作用。我得到的错误消息具体是“启动应用程序时发生错误”,我发现没有一个给定的配置可以解决这个问题,因为错误发生在配置执行之前。

不知何故,发布目标文件夹一定在发布过程中损坏了,因为我发现删除整个部署目录并重新发布解决了问题

否则,这里是参考:http://docs.asp.net/en/latest/fundamentals/diagnostics.html https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling

【讨论】:

  • 我遇到了同样的问题,但没有出现错误。我发布了删除现有文件,它似乎对我有用,我一定遇到过类似的问题。对于其他人,如果您从 Visual Studio 发布,请勾选“在目标位置删除其他文件”。
  • 如何删除 Azure 网站上的整个部署目录?我知道如何在云服务上执行此操作,但在 Azure 网站上找不到方法。
  • @Yodacheese 的建议对我有帮助。乔什我认为也许通过服务器资源管理器(在 VS 中)执行此操作会起作用,但事实证明您无法删除此面板的任何内容。但是在尝试两次删除所有发布文件后,我能够解决上述确切问题。
  • 这真的是在 asp.net 5 中的 Azure 上获得正确错误消息的唯一方法吗?我似乎无法从任何日志中获得任何体面的错误信息,即使我的应用程序错误实际上是在我的应用程序加载后发生的。
  • @JoshMouch 转到 AppServices >(选择您的 WebApp)> 所有设置 > 部署槽 >(选择您的部署槽)> 删除
【解决方案4】:

我在运行 dnx-clr-win-x64.1.0.0-rc1-update1 的 Web 应用程序中遇到了完全相同的错误。我直接从 Visual Studio 2015 Enterprise Update 1 进行了部署。我发现每当我在新创建的 Web 应用程序上进行第一次部署时,该站点都可以正常工作。从第二次部署开始(即使部署完全相同的内容),我开始看到内部服务器错误 500。这让我想到了以下解决方案:

在 Visual Studio 的发布向导中启用“在目标位置删除其他文件”为我修复了它。

【讨论】:

  • 令人惊讶的是,在所有这些解决方案中,这个对我有用(运行 ASP.NET 5 RC1 / Core 1.0 RC1)。
【解决方案5】:

我遇到了同样的问题,并花了很多时间尝试挖掘错误日志等(上面给出的所有其他解决方案)。他们都没有给出任何错误的线索。

我所做的最终帮助我看到了错误是简单地尝试publish to a local IIS(毕竟 azure web-app 在内部运行 IIS 上的 dnx)。

然后我可以立即看到 IIS 尝试编译源代码时出现错误。 (在我的情况下是一些格式错误的 nuget 包)。

简而言之:

通过发布到本地 IIS 重新创建 azure web-app 上发生的事情。

【讨论】:

    【解决方案6】:

    在您的 wwwroot 文件夹中创建一个 web.config 并包含以下内容:

    <configuration>
      <system.web>
        <customErrors mode="Off" />
      </system.web>
    </configuration>
    

    【讨论】:

    • 已经这样做了,但它不起作用。错误页面来自新的 asp.net 堆栈,当我按照您的建议激活自定义错误时,我只在第二个屏幕截图中看到了错误页面,这也不是很有帮助。
    • 删除请求跟踪和诊断中间件,然后重试。您应该会看到正常的 iis 错误 ysod。
    • 显然这仅在应用程序启动期间发生错误时才有效(ASP.NET 5 RC1)。见这里:docs.asp.net/en/latest/fundamentals/…
    【解决方案7】:

    您是否签入了 eventlog.xml 文件?它位于 D:\home\LogFiles 目录中。您可以从应用的 Kudu 站点查看它,或使用 Azure 网站事件查看器扩展。

    【讨论】:

    • 是的,我查看了它,那里没有任何记录。我什至查看了子文件夹 W3SVCXXXX 中生成的日志文件,但没有什么有趣的:(
    • 嗯,我以前遇到过这个问题(最终成为我的 web.config 的问题),我认为这就是我找到信息的地方。我能想到的唯一另一件事是启用失败的请求跟踪并进行挖掘。
    • 实际上我的项目中没有任何 web.config (我还不需要它,现在使用 config.json 方法)。天蓝色的网站上有一个,但它是在 kudu 部署期间生成的。无论如何我要看看失败的请求跟踪方式
    【解决方案8】:

    您是否尝试过使用远程调试 Azure Webapp?有可能发生了一些导致此问题的异常,如果您查看调试输出窗口,您可能能够看到正在发生的异常,然后更改 Visual Studio 设置以中断该异常以查看它发生的位置。查看这篇文章以了解如何远程调试 - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-studio-2013.aspx

    【讨论】:

    • 是的,已经尝试过了,但我认为错误发生得太快了。
    • 是否可以分享您看到的示例应用程序。我可以尝试设置它,看看我是否到达某个地方...如果可以的话,您可以通过 OneDrive 或任何其他方式共享示例
    【解决方案9】:

    在我使用 beta5 的情况下,web.config 中的自定义错误没有帮助,本地 IIS 很好,并且添加异常处理程序没有显示任何内容。唯一有效的方法是核对 approot 并重新部署。

    【讨论】:

      【解决方案10】:

      在 Web 应用程序的应用程序设置部分的应用程序设置中,将 Hosting:Environment 添加(或更改其值)到 Development。然后你会得到与本地开发相同的错误页面。在我的 Startup.cs 中,我有带有以下代码的常规 Configure() 方法:(仍在 MVC 1.0 RC1-final 中)

              if (env.IsDevelopment())
              {
                  app.UseBrowserLink();
                  app.UseDeveloperExceptionPage();
                  app.UseDatabaseErrorPage();
              }
              else
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-22
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多