2009-06-21 3 views
1

Est-il possible de renvoyer la réponse de la page à l'utilisateur, avant d'avoir terminé tous les travaux côté serveur? Par exemple, j'ai un compte d'hébergement pas cher avec aucune base de données, mais je voudrais enregistrer un certain événement, en appelant un service web sur mon autre compte d'hébergement plus cher (c'est-à-dire, une opération de journalisation très lent)Est-il possible de renvoyer une page ASP avant de continuer le travail côté serveur lent (par exemple la journalisation)

Je ne veux pas vraiment que l'utilisateur doive attendre que cette opération de journalisation lente se termine avant que leur page ne soit rendue. Aurais-je besoin de lancer un nouveau thread, ou faire un appel asynchrone?

Ou est-il possible de retourner la page, puis continuer à travailler heureusement dans le même fil/code?

En utilisant ASP.Net (webforms) C# .Net 2.0 etc.

Répondre

2

Vous auriez probablement besoin d'un deuxième thread. Une option facile serait d'utiliser le ThreadPool, mais dans une configuration plus sophistiquée, une file d'attente producteur/consommateur fonctionnerait bien.

Au niveau le plus simple:

ThreadPool.QueueUserWorkItem(delegate { 
     DoLogging(state details); 
    }); 
1

Vous pouvez vous - essayer Response.Flush. Cela étant dit, la création d'un appel asynchrone peut être la meilleure façon de faire ce que vous voulez faire. Response.Flush simplement vidés le tampon de sortie au client, un appel asynchrone vous permettrait de déclencher un appel de journalisation et ne pas avoir d'impact sur le temps de chargement du client. Gardez à l'esprit qu'un appel asynchrone effectué pendant le cycle de vie de la page dans ASP.NET peut ne pas revenir à temps pour que vous puissiez faire quoi que ce soit avec la réponse.

+0

Wow! réponse rapide (et Marc aussi). L'exploitation serait à peu près le feu et oublier. Je vais essayer ces deux méthodes et voir comment mon salaire varie! Ta –

Questions connexes