Bonjour,
Présentation du contexte :
Je développe une application en ASP.NET / C# 3.5.
J'ai une page spéciale, où je me suis complètement désolidarisé de ASP.NET.
Qu'est ce que ça veut dire ?
Ca veut dire que pour cette page, j'écris tous le HTML à la main.
Je n'ai aucun code behind. A part le Page_Load (où je ne fais rien), je n'ai aucun code, aucun évènement serveur écrit dans le code behind de la page.
Je gère tous les évènements dans ma page en javascript + ajax grâce à JQuery.
J'utilise la fonction $.ajax de JQuery pour appeler toutes mes methodes C# effectuant les traitements côté serveur.
Mes méthodes codées en C#, sont toutes situées dans un WebService.
Problématique :
La page que je développe me permet de réaliser des traitements sur des articles.
Je peux réaliser des traitements sur 1 000 000 d'articles.
Dans le cas où il y a beaucoup d'articles à traiter, le traitement côté serveur peut être très long.
Actuellement je gère les traitements de la façon suivante :
Côté interface utilisateur, quand je démarre un traitement, j'appelle ma fonction $.ajax en JQuery qui appelle ma méthode côté serveur qui réalise le traitement.
Ma fonction en ajax est asynchrone.
J'affiche une popup d'attente (popup JQuery UI) à l'utilisateur pendant toute la durée du traitement.
Mon problème est que je veux afficher une barre de progression à l'utilisateur, ce qui est particulièrement appréciable dans les cas de longs traitements.
Niveau graphique, je vais utiliser la progressbar de JQuery UI.
Mais comment communiquer régulièrement au client l'état d'avancement de ma requète exécutée sur le serveur ?
En lisant quelques sujets sur la question ici et là, j'ai un début de solution (que je n'ai pas mis en pratique) :
- Il faut qu'on ai a dispo une base de donnée.avec une table contenant 2 champs : champ 1 = nb d'articles total à traiter ; champ 2 = nb d'articles traités
- Dans ma requète principale, je fais une boucle foreach pour traiter un à un mes articles. A la fin de chaque tour de boucle, je dois sauvegarder l'état d'avancement du traitement en base de données.
- Côté client, après avoir lancé ma requète principale (le traitement des articles), je dois lancer à intervalle régulier une 2eme requete qui lirais l'état d'avancement de la requete principale dans la base de données et le retournerait au navigateur.
Avec le resultat de la 2ème requete (qui retournerait le nombre d'articles traités), je fais avancer ma barre de progression JQueryUI en conséquence.
J'ai 3 questions :
1) Avant de me lancer, est ce que ce schéma vous semble réalisable techniquement ?
2) Comment implémenter un timer en Jquery ?
3) Avez vous une solution plus simple que cela ?
Merci de votre aide.
Partager