web-dev-qa-db-fra.com

Comment obtenir les détails d'erreur d'une application ASP.NET 5 déployée sur des sites Web Azure?

J'ai une solution ASP.NET 5 avec un site Web et plusieurs bibliothèques de projets. J'utilise MVC 6 et Entity Framework 7. Au niveau local, l'application fonctionne correctement. Jusqu'à présent, elle fonctionnait également sur Azure déployé en tant que site Web Azure.

Mais aujourd'hui, après le dernier déploiement sur Azure, j'ai reçu une erreur 500 comme celle-ci au démarrage (qui fonctionne toujours localement):

enter image description here

J'ai essayé d'obtenir plus de détails par:

  • utiliser des diagnostics de middleware
  • ajout des paramètres customError/httpError dans le fichier web.config
  • téléchargement de la page DetailedError générée 

Il semble que l’erreur/exception se produise au cours de l’étape de démarrage/configuration, mais la page d’erreur générique ne contient toujours pas de détails. Même la version générée sur le serveur (dossier DetailedErrors), j’ai eu ceci:

enter image description here

J'ai activé le suivi des demandes ayant échoué, mais toujours aucune information utile:

enter image description here

Même si je supprime le code dans le démarrage/configurer et ajoute un try/catch comme suggéré, j'ai la même erreur sans détails. Cela semble être un problème de configuration/compilation mais difficile à déboguer sans aucune information.

39
MatthieuGD

Dans RC1 (à partir de beta8, peut-être), on devrait apparemment utiliser:

app.UseDeveloperExceptionPage();

..qui ne fonctionne apparemment que si app.Properties["Host.AppMode"] est "development"

Mais cela n'a pas fonctionné pour moi. Le message d'erreur que je recevais était spécifiquement "Une erreur s'est produite lors du démarrage de l'application", j'ai constaté qu'aucune des configurations données ne résoudrait ce problème car l'erreur se produisait avant que les configurations ne soient exécutées. 

D'une manière ou d'une autre, le dossier cible de publication doit avoir été corrompu pendant la publication car j'ai découvert que la suppression de tout le répertoire de déploiement et la re-publication ont résolu le problème.

Sinon, voici la référence: http://docs.asp.net/fr/latest/fundamentals/diagnostics.html

19
Jon Davis

Les erreurs qui se produisent au démarrage dans une application ASPNET5 sont très difficiles à détecter lors de l'exécution de l'application dans Azure (au moins avec la version bêta 3). J'espère qu'ils trouveront un moyen d'améliorer l'expérience. Je devais avoir recours à la démonstration de mon démarrage, puis à l'ajout de code ligne par ligne jusqu'à l'échec (dans mon cas, il s'agissait d'une variable d'environnement manquante).

J'ai également utilisé un code comme celui-ci (uniquement pour le débogage), ce qui peut aider en fonction de l'endroit où l'erreur se produit:

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

Mise à jour 27/10/2016 Beaucoup de choses ont changé depuis ma réponse initiale. Les dernières directives sont affichées ici:

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

Alors, ajoutez:

.CaptureStartupErrors (true) et .UseSetting (WebHostDefaults.DetailedErrorsKey, "true") sur votre WebHostBuilder comme suit:

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

Vous devez définir la propriété de paramètres d'application ASPNET_DETAILED_ERRORS à true dans le fichier web.config.

Exemple de mon fichier web.config modifié:

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

J'ai rencontré exactement la même erreur avec une application Web exécutant dnx-clr-win-x64.1.0.0-rc1-update1. J'ai effectué le déploiement directement à partir de Visual Studio 2015 Enterprise Update 1. J'ai constaté que le site fonctionnait à chaque fois que je procédais au premier déploiement sur une application Web nouvellement créée. À partir du deuxième déploiement (même lorsque vous déployez exactement le même contenu), j'ai commencé à voir Internal Server Error 500. Cela m'a amené à la solution suivante: 

L'activation de "Supprimer les fichiers supplémentaires à la destination" dans l'assistant de publication de Visual Studio a corrigé le problème.

 enter image description here

8
JRoppert

J'ai eu le même problème et j'ai passé beaucoup de temps à essayer de creuser des journaux d'erreurs, etc. (toutes les autres solutions données ci-dessus). Aucun d'entre eux ne donne la moindre idée de ce qui ne va pas.

Ce que j’ai fait, c’est l’essai de publier sur un IIS (après que toute application Web Azure exécute votre dnx sur IIS en interne).

Je pouvais alors immédiatement voir qu'il y avait une erreur lorsque IIS essayait de compiler la source. (dans mon cas, un paquet de pépites mal formé).

Donc en bref:

Recréez ce qui se passe sur l'application Web Azure en publiant sur IIS local.

5
Mo Valipour

Créez un web.config dans votre dossier wwwroot avec ce contenu:

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

Avez-vous vérifié le fichier eventlog.xml? C'est dans le répertoire D:\home\LogFiles. Vous pouvez l'afficher depuis le site Kudu de votre application ou utiliser l'extension de l'observateur d'événements Web Azure Websites.

3
BenV

Avez-vous essayé d'utiliser Remote Debugging Azure Webapp? Il se peut qu'une exception se produise, responsable de ce problème. Si vous regardez votre fenêtre DEBUG OUTPUT, vous pourrez peut-être voir quelle exception se produit, puis modifier les paramètres de Visual Studio pour les interrompre afin de voir où elle se produit. Consultez cet article pour comprendre comment déboguer à distance - http://blogs.msdn.com/b/webdev/archive/2013/11/05/remote-debugging-a-wind-Awure-web-site-with- visual-studio-2013.aspx

3
Puneet Gupta

Dans mon cas avec la version bêta 5, les erreurs personnalisées dans web.config ne permettaient pas de résoudre le problème. Le paramètre local IIS convenait, et l'ajout d'un gestionnaire d'exceptions ne présentait rien. La seule chose qui a fonctionné a été de neutraliser l’approche et de se redéployer.

1
Jeff Dunlop

Dans les paramètres de l'application de l'application Web, dans la section Paramètres de l'application, ajoutez (ou modifiez la valeur de) Hébergement: Environnement à Développement . Ensuite, vous obtenez la même page d'erreur que dans votre développement local. Dans mon Startup.cs, j'ai la méthode Configure () habituelle avec le code suivant: (toujours dans MVC 1.0 RC1-final)

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

J'espère que cela t'aides!

0
Peter Lindgren