Au cours des dernières semaines, nous avons étudié certains problèmes de performances où notre application MVC répondait très lentement pour la première demande. Nous parlons comme 30-45 secondes pour la première demande et 3 secondes pour chaque nouvelle vue. Notre application MVC utilise notre API OData (API Web) qui se trouve sur le même serveur. Outre les mêmes problèmes de performances que l'application MVC, la première requête vers la version 6 du framework d'entité s'exécute en 6 secondes et les nouvelles requêtes s'exécutent 200 ms plus lentement que les requêtes suivantes.
Afin de répondre à nos exigences, nous avons choisi d'exécuter toutes les requêtes Ef connues et d'atteindre tous nos points de terminaison MVC/API à partir d'Application_Start dans Global.asax. Cela semble fonctionner correctement pendant au moins quelques heures, mais après un certain temps sans utilisation, la première demande à chaque vue MVC répond en 3 à 5 secondes.
Nous avons configuré les sites Web pour qu'ils soient "toujours activés" et nous n'avons rien trouvé dans les journaux IIS ou la journalisation que nous avons ajoutés à Application_Start. Il semble donc que nos applications ne sont au moins pas recyclables . Je soupçonne qu'une sorte de cache IIS en cours de suppression ou peut-être du cache Ef? Toutes les suggestions sont les bienvenues.
Vous souhaiterez activer le paramètre "Always On" pour votre application Web.
Vous pouvez le faire à partir de portal.Azure.com -> la lame de votre site -> Tous les paramètres -> Paramètres de l'application -> Always On
Voir ici pour plus de détails: https://Azure.Microsoft.com/en-us/documentation/articles/web-sites-configure/
Lorsque Always On est désactivé, après 20 minutes d'inactivité, le site est supprimé afin de libérer des ressources pour tout autre site qui pourrait s'exécuter sur le même plan App Service.
J'ai eu le même problème et, malheureusement, le paramètre "Always On" n'est pas disponible sur les niveaux de tarification gratuits et partagés. J'ai trouvé un moyen facile de garder l'application Web au chaud afin qu'elle ne se décharge pas consiste à configurer un test ping Application Insights sur un intervalle de 15 minutes par rapport à l'URL de l'application Wep. Une procédure pas à pas pour savoir comment cela peut être trouvée ici
Une solution rapide peut être de créer un job d'arrière-plan qui exécutera fréquemment une commande ping sur votre site Web pour éviter l'état d'inactivité de la webApp.
Ou
Essayez de mettre à niveau le plan de base de données SQL Server et testez en conséquence.
Bonne chance, j'espère que ça aide.
Avez-vous essayé d'enquêter sur ce problème en activant échec de la journalisation des demandes?
Portail Azure → votre service d'application → Surveillance → Journaux de diagnostic → Échec du suivi des demandes (Activé)
J'ai rencontré un problème similaire dû à la limitation de l'accès à l'application à l'aide de la section ipSecurity
dans web.config. S'il vous arrive de restreindre l'accès de cette façon, vous devez mettre en liste blanche l'IP de votre service d'application.