2010-07-20 2 views
0

Je suis novice en matière de développement web, donc je ne sais pas quelle est la meilleure option pour le problème que je rencontre.Comment envoyer des informations d'état à partir d'un service Web en cours d'exécution?

Fondamentalement, j'ai une application Web qui appelle un service Web pour le traitement de certaines données. Ce processus peut prendre beaucoup de temps (heures) et je voudrais savoir s'il existe un moyen facile d'envoyer des informations d'état au client de temps en temps.

À l'heure actuelle, le client effectue la demande à partir du navigateur et il attend juste là jusqu'à ce qu'il se termine.

Comment puis-je envoyer des informations à partir du service Web? Je voudrais envoyer un pourcentage et un texte supplémentaire précisant ce qui est fait.

Merci

Répondre

0

Les services WCF peuvent être marqués comme [OneWay] afin qu'ils ne retournent pas de réponse. ou, vous pouvez demander au service de lancer le processus de manière asynchrone, puis de retourner au client que le processus a démarré ou non.

Ensuite, le client peut interroger une autre méthode comme suggéré par l'autre utilisateur.

Si vous traitez des heures, vous ne pouvez certainement pas utiliser un service de synchronisation car vous atteindrez le délai d'attente d'exécution ou le délai d'attente de connexion pour le client.

+0

Merci pour l'information. Je ne connaissais pas l'option [OneWay]. – LEM

+0

La chose à propos de OneWay est que même si vos erreurs de service ne sont pas connues, cela rend l'étape suivante d'interrogation d'autant plus importante. Je dirais que si vous êtes à l'aise avec l'envoi d'un «travail» ou d'un traitement asynchrone à partir du service synchrone, vous obtiendrez les deux: les commentaires du service pendant le coup d'envoi initial et la capacité de fonctionner longtemps processus en cours dans le service wcf. Vous pouvez voir ici que Steve Gilham note que même un service duplex peut faire l'affaire: http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf –

+0

Merci encore . J'apprécie vraiment votre aide. – LEM

0

Peut-être que vous pouvez interroger une autre méthode pour l'état?

+0

Comment puis-je faire cela? L'exécution sur le client est arrêtée en attente de la fin du service Web. – LEM

+0

Vous pouvez générer un nouveau thread pour l'interrogation juste avant l'appel, et le tuer après avoir obtenu le résultat ... – Marko

+0

Ou peut-être que le minuteur serait plus élégant/facile à implémenter ... – Marko

0

Si j'étais vous, je rendrais la requête originale asynchrone, car au lieu d'attendre la réponse, elle "démarre" la tâche et revient immédiatement. Ensuite, j'aurais une méthode distincte sur votre service Web que l'application peut interroger périodiquement pour obtenir le statut du travail. Une fois l'opération terminée, il peut afficher les données comme le faisait la requête d'origine. Si vous voulez le faire de manière synchrone, vous pouvez désactiver Response.Buffer et écrire directement dans la réponse.

+0

Merci, je vais essayer de cette façon. – LEM