如何获取部署在Azure网站上的ASP.NET 5应用程序的错误详细信息?

时间:2015-04-08 15:02:14

标签: asp.net azure-web-sites asp.net-core

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

但是今天在Azure上进行最新部署后,我在启动时遇到了类似错误500(仍在本地工作正常):

enter image description here

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

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

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

enter image description here

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

enter image description here

即使我删除了启动/配置中的代码并按照建议添加了try / catch,我也得到了相同的错误而没有发现。它似乎是一个配置/编译问题,但没有任何信息很难调试。

10 个答案:

答案 0 :(得分:20)

在Azure中运行应用程序时,在ASPNET5应用程序启动时发生的错误很难追踪(至少在测试版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

所以,添加:

WebHostBuilder上的

.CaptureStartupErrors(true)和.UseSetting(WebHostDefaults.DetailedErrorsKey," true"),如下所示:

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

答案 1 :(得分:20)

在RC1中(或许是beta8),显然应该使用:

app.UseDeveloperExceptionPage();

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

但这对我没有用。我收到的错误消息是&#34;启动应用程序时发生错误&#34; ,我发现没有一个给定的配置会解决这个问题,因为错误发生在配置之前执行。

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

否则,这里是参考:http://docs.asp.net/en/latest/fundamentals/diagnostics.html

答案 2 :(得分:8)

您必须在 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>

答案 3 :(得分:8)

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

启用&#34;删除目的地的其他文件&#34;在Visual Studio的发布向导中为我修复了它。

enter image description here

答案 4 :(得分:5)

我遇到了同样的问题,花了很多时间试图深入研究错误日志等(上面给出的所有其他解决方案)。他们都不知道出了什么问题。

我做了什么帮助我终于看到错误只是尝试publish to a local IIS(毕竟azure web-app在IIS内部运行你的dnx)。

我可以立即看到IIS尝试编译源时出错。 (在我看来是一些畸形的nuget包)。

简而言之:

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

答案 5 :(得分:4)

使用以下内容在web.config文件夹中创建wwwroot

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

答案 6 :(得分:3)

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

答案 7 :(得分:3)

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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

在Web应用程序的“应用程序”设置中,在“应用程序设置”部分中,将主机:环境的值(或更改值)添加到开发。然后,您将获得与本地开发中相同的错误页面。在我的Startup.cs中,我使用以下代码的常规Configure()方法:(仍然在MVC 1.0 RC1-final中)

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

希望这有帮助!