2009-06-18 9 views
1

J'ai la situation suivante: J'ai une procédure stockée qui prend des données d'un tas de tables et crée un enregistrement dans une seule table. Après cela, l'utilisateur final peut obtenir des graphiques basés sur les données de la ligne dans la table résultante. Le problème est que la collecte de données à partir de plusieurs tables dans le résultat peut avoir une très longue période de fonctionnement. Je voudrais à partir de mon application Web donner la possibilité à l'utilisateur de commencer cette collecte de données, et quand c'est fait pour l'informer à ce sujet, afin qu'il puisse accéder au diagramme graphique basé sur les données collectées résultantes. Ma question est de savoir comment mettre en œuvre cela comme meilleure pratique.Collecte de données SQL avec retour à l'application Web asp.net

Répondre

1

Démarrez un thread d'arrière-plan sur le serveur pour effectuer le traitement. Vous pouvez stocker les résultats de traitement dans session state, la base de données ou un autre emplacement.

Sur le côté client, utilisez un UpdatePanel et un temporisateur pour interroger régulièrement le serveur afin d'obtenir des résultats. Lorsque les résultats sont là, désactivez la minuterie.

0

Je ferais quelque chose comme suggère Andomar, mais dans un service Windows au lieu d'un thread dans le processus asp.net.

D'abord je voudrais installer une table dans ma base de données qui serait utilisée comme une file d'attente de travail - peut-être votre table de résultats suffirait? Cette table contiendrait un identifiant unique de travail, une description de travail (utilisée par votre service pour déterminer ce qu'il faut faire) et un code de statut de travail (nouveau, fonctionnel, terminé).

Ensuite, je voudrais installer une application de service Windows qui permettrait d'interroger cette table régulièrement. Peut-être aussi souvent av toutes les 5-30 secondes en fonction de votre charge. Le service serait simple: s'il trouvait de nouveaux emplois, il marquerait le premier travail comme "fonctionnant" et ensuite lancerait le processus de collecte de données. Une fois le processus terminé, le service marquerait le travail comme terminé. Enfin, dans mon application asp.net, je voudrais configurer une page de commande où l'utilisateur pourrait demander de nouveaux travaux de collecte de données. La requête insère un nouvel enregistrement dans la table de file d'attente de travail avec le statut comme nouveau et la description du travail si nécessaire. Ensuite, la page redirige l'utilisateur vers une nouvelle page (ou utilise ajax) qui vérifie l'état du travail et recharge toutes les XX secondes pour vérifier si le travail est terminé. Lorsque le code d'état du travail est défini sur Terminé, nous affichons la page sur laquelle l'utilisateur peut afficher le rapport ou télécharger le fichier ou autre.

Ce que je suggère ici est une implémentation simple d'une file d'attente de travaux d'interrogation. Vous pourriez bien sûr faire une version plus sophistiquée en utilisant MSMQ ou quelque chose comme ça, mais cela devrait suffire pour de nombreuses situations, sinon la plupart.

Questions connexes