2010-05-13 11 views
4

J'ai une page web simple dans ASP.NET/C#. Actuellement, pour rendre les données complètes, j'ai besoin d'appeler un bloc de code qui s'exécute sur les threads d'arrière-plan et qui peut prendre plusieurs minutes. Je l'ai fait au point (en utilisant l'attribut async sur la déclaration de la page) pour exécuter et retourner bien avec le code HTML une fois que c'est fait. Ce que je voudrais qu'il me permette de revenir immédiatement avec une «page de chargement» et ensuite avoir cette page à jour lorsque le travail en arrière-plan a été terminé. À l'heure actuelle, je n'ai rien sur la page pendant que le travail en arrière-plan est en cours de traitement. Toutes les idées sur la meilleure façon ou la manière intelligente de faire cela seraient grandement appréciées!'Chargement' de la page Web pour l'appel asynchrone

Merci,

Sieg

Répondre

0

Il y a plusieurs façons de mettre en œuvre ce que vous décrivez en utilisant Ajax mais si vous voulez le garder très simple, vous pouvez simplement Flush() votre réponse avec un certain écran de chargement avant vous commencez les longues tâches en cours d'exécution:

<div> 
    Loading.. 
    <% Response.Flush(); %> 
    <% System.Threading.Thread.Sleep(5000); %> 
    Done! 
</div> 
+0

Essayé et que l'on a aimé l'idée car il avait l'air gentil et simple. Cependant, alors qu'il semblait fonctionner au début, il a échoué à la fin, car il ne pouvait pas enregistrer la session. – Sieg

0

Qu'est-ce que vous voulez est appelé HTTP Server Push ou HTTP Diffusion en continu ou Relève longue. Selon comment c'est fait.

Il existe de nombreux exemples sur le Web, ainsi que des articles qui expliquent les problèmes en profondeur. Je commencerais par faire des recherches sur ceux-ci.

Vous pouvez également consulter cette question SO sur HTTP streaming ...

Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern

Il y a un lien vers un article d'introduction là-dedans.

Ou celui-ci avec un exemple de longue interrogation

How do I implement basic "Long Polling"?

ou

https://stackoverflow.com/questions/tagged/long-polling

Hope this helps.

1

Je suis d'accord avec les commentaires publiés ci-dessus. Je voudrais cependant implémenter le "processeur" en tant que page séparée en utilisant un ashx (handler) car il est très simple d'appeler et d'interroger à partir de javascript et de simplement coder l'événement de requête de processus en alimentant le flux de réponse . J'aimerai vous montrer un exemple sur mon site mais mon hébergeur a décidé de faire une semaine de repos sur mon site pendant qu'ils mettent à jour .net sur leurs serveurs (vous pouvez imaginer que je ne suis pas particulièrement satisfait de cela).

Essentiellement bien que dans mon cas, j'ai une page qui repose sur les données: Le bbc google amazone youtube d'autres sites au hasard.

La page est renvoyée à l'utilisateur et les commandes individuelles de la page renvoient des appels ajax au serveur pour leurs composants.

Le contenu par défaut des balises dans lesquelles les données renvoyées seront chargées est une simple image animée qui ressemble beaucoup à un cercle de chargement flash ou silverlight.

Une fois les données récupérées, le fichier GIF est remplacé par le contenu du serveur. Cela signifie que le client voit le "chargement" et que le serveur est occupé à gérer tout ce dont le client a besoin (apparemment de façon synchrone de son point de vue).

C'est une expérience utilisateur propre et le code est vraiment simple.

J'ai trébuché sur l'idée en regardant comment faire le téléchargement de fichiers en utilisant Silverlight.

Concept de base:

  1. appel ajax à "ashx". (peut-être 10 lignes de javascript)
  2. demande de traitement du serveur. (dépend de la complexité de la requête, des variables passées en utilisant querystring)
  3. La réponse remplit 1 élément sur la page autrement complète. (Ajax cllback le fait)

Hope this helps :)

Questions connexes