2009-07-18 6 views
2

Dupliquer
Ceci est une copie proche de Dealing with a longer running process in WCF. S'il vous plaît envisager d'afficher votre réponse à celui-là au lieu de cela.Processus de threads à exécution longue sous ASP.NET + WCF

Original Question
Je la mise en œuvre de la couche métier d'une application qui doit exécuter des processus d'arrière-plan à des moments programmés. La couche de gestion est composée de plusieurs services WCF s'exécutant tous sous la même application Web.

L'idée est de définir un ensemble de «tâches» qui doivent être exécutées à des moments différents (par exemple, toutes les 5 minutes, tous les jours à 23h00, etc.). Cela ne serait pas difficile à mettre en œuvre en tant que service Windows, mais le problème est que les tâches doivent accéder aux caches de données qui résident dans les services. Ce 'planificateur' doit donc s'exécuter dans le contexte IIS pour accéder à ces données. Ce que je fais actuellement utilise une ServiceHostFactory personnalisée dans l'un des services WCF qui génère un thread fils et renvoie. Le thread enfant dort et se réveille toutes les X minutes pour voir s'il y a des tâches planifiées et les exécute. Mais je crains que IIS tue aléatoirement mon thread lorsqu'il recycle le pool d'applications ou après un certain temps d'inactivité (par exemple, aucune activité sur les services WCF qui écoutent les requêtes de la couche de présentation). Le thread doit s'exécuter sans interruption, quelle que soit l'activité sur les services. Est-ce vraiment possible?

J'ai trouvé an article by someone doing the same thing, mais sa solution semble être ping sur le serveur à partir du thread fils lui-même régulièrement. J'espère qu'il y a une meilleure solution.

+0

Ceci est une copie très proche de http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf. S'il vous plaît jeter un coup d'oeil et voir si vous êtes d'accord avec moi. –

Répondre

1

J'ai à un moment donné mis en œuvre un service Windows qui chargerait une page Web sur une base régulière. L'objectif était que le site hébergeait une version de Workflow Foundation, et nous voulions nous assurer que l'application Web était restaurée après le recyclage par IIS du pool d'applications. Peut-être que la même approche peut être utilisée dans ce cas; avoir un service (ou tâche planifiée dans Windows, encore plus simple) exécuter toutes les x minutes et charger une page qui va vérifier les tâches.

1

Est-il possible d'exécuter un service Windows ou de placer des applications dans le planificateur Windows pour exécuter des méthodes dans le WCF à certains moments? Peut-être utiliser un BackgroundWorker à l'intérieur de la WCF. Une autre option serait que WCF fasse apparaître d'autres applications pour faire la logique métier, en passant les données appropriées ou des pointeurs vers les données en mémoire (non sécurisées).

Questions connexes