2017-09-03 4 views
0

ces derniers jours j'ai essayé de trouver la réponse au message d'erreur suivant qui a sévi dans mon application Core .NET 2.0 sur l'hébergement Web App Azure:.NET Core 2.0 sur Azure se traduit par un 502,3 CGI Erreur

Cette erreur se produit lorsqu'une application CGI ne renvoie pas un ensemble valide d'en-têtes HTTP ou lorsqu'un proxy ou une passerelle n'a pas pu envoyer la demande à une passerelle parente. Vous devrez peut-être obtenir une trace réseau ou contactez l'administrateur du serveur proxy, s'il ne s'agit pas d'un problème CGI.

Parce qu'il a fallu plusieurs jours pour trouver la réponse, je poste ma solution ici.

À côté de l'erreur CGI, j'ai également trouvé le code d'erreur suivant dans le journal des erreurs: 0x80072ee2. Ceci indique que la requête a été interrompue. Cependant, Azure a une limite de temporisation de 4 minutes et l'erreur est apparue après environ 1,5 minute. L'application a été conçue pour gérer la requête en moins de 4 minutes, donc une erreur de timeout ne devrait pas se produire.

Répondre

1

J'ai trouvé la solution après avoir lu la page suivante: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/?tabs=aspnetcore2x. Dans cette page, la relation entre IIS et le moteur Kestrel est expliquée. Bien que l'hébergement de l'application Web soit différent de l'hébergement IIS, je pense qu'Azure utilise beaucoup de modules IIS, car il existe de nombreuses similitudes.

Le numéro suivant sur github était aussi un morceau à la solution de mon problème: https://github.com/aspnet/IISIntegration/issues/311. Dans ce numéro, il est expliqué qu'à côté d'IIS, Kestrel dispose également d'une limite de temporisation de 2 minutes. J'ai manqué complètement ce peu d'information en cherchant une solution au début. La modification du délai d'attente du serveur Kestrel (qui se trouve sur la page suivante: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module) a permis de résoudre mon problème et de laisser la requête s'exécuter en 2,5 minutes. Plus tard, j'ai vérifié la durée exacte avant que le délai d'attente ne s'affiche avec les outils de développement Chrome et il semblait y avoir exactement 2 minutes, ce qui aurait dû être une indication plus précoce que mon problème était le délai du serveur Kestrel.