Toujours penser à paramétrer correctement l’attribut executionTimeout en production

Je vous mets en contexte pour ce billet. Pour le site du client que je ne peux nommer, j’ai eu à développer un ajustement au module de génération du sitemap.xml pour ce site. La fonctionnalité à ajouter était d’ajouter le support pour l’annotation hreflang. Le hreflang permet de faciliter le travail des moteurs de recherche pour identifier le contenu multilingue et multirégion.

Pour des raisons pratico-pratiques, notre sitemap.xml est généré par une tâche planifiée s’exécutant la nuit. Avec l’ajout du hreflang, si vous êtes du genre à aimer les chiffres, le sitemap.xml de ce site fait plus de 15 mégaoctets et prend plus de 10 minutes à se générer. Avec un site qui est dupliqué dans 48 pays et 27 langues. Vous vous imaginez un peu pourquoi c’est si long!

Lors de son développement, cette nouvelle fonctionnalité a passé haut la main toutes les étapes de tests et de contrôle qualité. Comme dirait l’autre: c’est long, mais ça marche!

Works On My MachineSauf qu’une fois en production, invariablement la tâche échouait au bout de quelques minutes. Au pif, le délai était très court. Alors, comment le même code qui s’exécute haut la main sur mon poste peut-il faire patate une fois en production?

Après une investigation de l’historique des événements, il s’avère que l’erreur suivante arrivait près de deux minutes suivant l’exécution de la tâche planifiée:

System.Web.HttpException (0x80004005): Request timed out.

Or, une recherche rapide sur Google démontre qu’il y a une explication très simple qui fait en sorte que cette situation se produit. Sur l’environnement de production, l’application web est déployée en mode Release.

Il s’avère que certains comportements d’ASP.NET ne sont pas les mêmes en Debug qu’en Release. C’est conçu ainsi et j’avais oublié! Je ne m’étais surtout pas méfié!

Il fallait lire la documentation! C’est indiqué très clairement.

Lorsqu’on déploie une application en mode Release et qu’on exécute une longue requête, il est important de spécifier un délai d’exécution plus grand sur l’élément <httpRuntime> comme suit:


<configuration>
<system.web>
<httpRuntime executionTimeout="300" />
</system.web>
</configuration>

view raw

web.config.xml

hosted with ❤ by GitHub

Voilà! C’est tout!

Je profite de cette occasion pour souhaiter un joyeux Noël à tous. Profitez de cette période pour apprécier le moment présent.

Sur une note plus personnelle, je vous remercie de tout mon cœur de visiter mon blogue quotidiennement et en grand nombre.

Joyeux Noël!

Publicité

Auteur : Pascal Paradis

Je suis les mains et le cerveau derrière http://frenchcoding.com. Je développe des microservices chez @UbisoftMTL. Amateur de Hockey et j'aime la technologie, en général.

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueueurs aiment cette page :