2009-08-06 5 views
1

Ok, donc j'ai Call1 dans un webservice qui va démarrer un thread de travail de bacground pour commencer à faire un peu de traitement, mais aimerait avoir un autre appel (Call2) qui va surveiller le Worker Thread original via un référence?Thread Worker Background dans le contexte WebService

Des suggestions sur comment faire cela? Je voudrais vraiment rester loin d'un WinService pour faire mon traitement. Comme j'ai besoin d'être plus en temps réel.

+0

Je ne suis pas sûr de comprendre ce que vous entendez par Call2 pour "surveiller" le thread. Voulez-vous dire à Call2 de regarder un état de progression lié à la tâche du thread et de rapporter à l'appelant? – AnthonyWJones

+0

Yip c'est exactement ce dont j'ai besoin. Je pense que j'ai trouvé une réponse ici ... http://stackoverflow.com/questions/228775/net-web-service-backgroundworker-threads –

+0

Cela fonctionnera mais n'héberge pas un bon mécanisme pour vérifier ce thread de Call2. –

Répondre

2

Je ne vois pas pourquoi l'utilisation d'une application de service devrait poser problème. Les services fonctionnent tout le temps et les surveiller peut être fait en temps réel. Mais, si vous ne voulez vraiment pas aller de cette façon, il y a d'autres options. Il est possible de démarrer un nouveau thread, en utilisant le ThreadPool ou en démarrant un nouveau Thread manuellement, et ce thread s'exécutera en arrière-plan du pool d'applications où votre service Web s'exécute.

Vous pouvez utiliser une bibliothèque de planificateur de tâches pour cela. Découvrez Quartz.net pour cela. Sachez que le domaine d'application sur lequel votre service Web s'exécute peut être arrêté à tout moment si IIS le juge nécessaire, donc il n'y a aucune garantie que le travail se terminera. L'utilisation d'une application de service va résoudre ce problème.

+0

Je n'ai pas pensé au problème du domaine de l'application. Vous avez raison, cela ne va pas être économisé du tout ... Est-il facile d'envoyer un événement direct au service Windows au lieu de se fier à une minuterie pour vérifier la BD pour un nouveau travail? –

+1

Si vous utilisez .NET 3.5, vous pouvez héberger un service Web directement dans votre application de service à l'aide de WCF. De cette façon, vous pouvez exposer directement les méthodes qui interagissent avec votre service. Si ce n'est pas une option, vous pouvez utiliser Remoting pour communiquer avec votre application de service depuis votre service Web. Ce n'est pas très difficile, mais plus maladroit que l'approche de la WCF. –

Questions connexes