How to Get Error Details of an ASP.NET 5 app deployed on Azure Websites?

烂漫一生 提交于 2019-11-27 04:21:24

问题


I have an ASP.NET 5 solution with a website and several project libraries. I'm using MVC 6 and Entity Framework 7. Locally the app is working fine and until today it was working also on Azure deployed as an Azure Website.

But today after the latest deployment on Azure I got an error 500 like this on the startup (still working fine locally):

I tried to get more details by :

  • using middleware diagnostics
  • adding the customError / httpError settings in the web.config file
  • downloading the DetailedError page generated

It seems that the error/exception is happening during the Startup/Configure step but I'm still getting the generic error page without details. Even the version generated on the server (DetailedErrors folder) I got this:

I enabled the Failed Request Tracing but still no useful information:

Even if I strip down the code in the Startup/Configure and add a try/catch as suggested I got the same error without détails. It seems to be a configuration/compilation issue but hard to debug without any information.


回答1:


In RC1 (as of beta8, perhaps), one should apparently use:

app.UseDeveloperExceptionPage();

.. which apparently only works if app.Properties["host.AppMode"] is "development".

But this didn't work for me. The error message I was getting was specifically "An error occurred while starting the application", I have found that none of the given configurations will resolve this because the error is occurring before the configurations execute.

Somehow, the publish target folder must have gotten corrupted during publish because I found that deleting the entire deployment directory and re-publishing resolved the problem.

Otherwise, here is the reference: http://docs.asp.net/en/latest/fundamentals/diagnostics.html https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling




回答2:


Errors that occur in startup in an ASPNET5 application are really hard to track down when running the app in Azure (at least with beta 3). Hopefully they find a way to improve the experience. I had to resort to stripping my startup down to the bare bones and then adding code line by line until the failure happened (in my case, it was a missing environment variable).

I've also used code like this (for debugging only) which might help depending on where the error is happening:

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);
            });
        }
    }

Update 10/27/2016 A lot has changed since my original answer. The latest guidance is posted here:

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

So, add:

.CaptureStartupErrors(true) and .UseSetting(WebHostDefaults.DetailedErrorsKey, "true") on your WebHostBuilder like so:

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



回答3:


You must set app settings property ASPNET_DETAILED_ERRORS to true in web.config file.

Example of my edited web.config file:

<?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>



回答4:


I've experienced the exact same error with a web app running dnx-clr-win-x64.1.0.0-rc1-update1. I did the deployment directly from Visual Studio 2015 Enterprise Update 1. I found that the site was working whenever I did the first deployment on a newly created web app. Starting with the second deployment (even when deploying the exact same content), I started to see Internal Server Error 500. That brought me to the following solution:

Enabling "Remove additional files at destination" in the publishing wizard of Visual Studio fixed it for me.




回答5:


I had the same issue and spent a lot of time trying to dig into error logs, etc. (all of the other solutions given above). None of them giving any clue of what's gone wrong.

What I did that helped me finally see the error was to simply try to publish to a local IIS (after all azure web-app runs your dnx on IIS internally).

I could then immediately see that there are error when IIS tries to compile the source. (in my case was some malformed nuget package).

So in short:

Recreate what happens on azure web-app by publishing to local IIS.




回答6:


Create a web.config inside your wwwroot folder with this content :

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



回答7:


Have you checked in the eventlog.xml file? It's in the D:\home\LogFiles directory. You can view it from your app's Kudu site, or use the Azure Websites Event Viewer extension.




回答8:


Did you try using Remote Debugging the Azure Webapp ? Chances are there is some exception happening which is responsible for this and if you watch your DEBUG OUTPUT window, you may be able to see which exception is happening and then change Visual Studio settings to break on that exception to see where it is happening. check this article to understand how to remote debug - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-window-azure-web-site-with-visual-studio-2013.aspx




回答9:


In my case with beta5, custom errors in web.config didn't help, local IIS was fine, and adding an exception handler didn't display anything. The only thing that worked was to nuke approot and redeploy.




回答10:


In the Web app's Application settings, in the section App settings, add (or change the value of) Hosting:Environment to Development. Then you get the same error page as in your local development. In my Startup.cs, I have the regular Configure() method with the following code: (still in MVC 1.0 RC1-final)

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

Hope this helps!



来源:https://stackoverflow.com/questions/29518365/how-to-get-error-details-of-an-asp-net-5-app-deployed-on-azure-websites

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!