2010-08-24 5 views
3

J'ai une application de flux de travail .Net 4.0 hébergée dans WCF qui prend une demande pour traiter certaines informations. Cette information est transmise à un système secondaire via un service Web et renvoie un booléen indiquant qu'il va traiter cette information. Mon flux de travail passe alors en boucle, dormant pendant 5 minutes, puis interrogeant le système secondaire pour voir si le traitement de l'information est terminé.Liste des flux de travail en cours d'exécution dans .Net 4.0

Une fois terminé, le flux de travail se termine. J'ai ceci persistante dans SQL, et cela fonctionne parfaitement.

Ma question est comment puis-je récupérer une liste des workflows persistants de telle sorte que je puisse les rattacher à la demande d'origine? J'aimerais que mon interface utilisateur puisse répertorier les flux de travaux en cours dans une grille en fonction du temps écoulé depuis leur exécution. J'ai pensé à stocker le GUID de flux de travail dans ma base de données principale et à générer la liste de cette manière, mais ce que j'aimerais vraiment, c'est pouvoir réconcilier ce que je pense être en cours d'exécution et ce que pense le magasin persistant fonctionnement.

Je voudrais également être en mesure de sélectionner un flux de travail en cours d'exécution et le tuer ou le redémarrer complètement si l'utilisateur détermine qu'il est devenu fou.

Répondre

3

Vous pouvez promote des données à partir du flux de travail à l'aide de SqlWorkflowInstanceStore. Le résultat est qu'ils sont stockés à côté des données de flux de travail dans le InstancesTable en utilisant le InstancePromotedPropertiesTable. L'utilisation de la vue InstancePromotedProperties est la méthode la plus simple pour interroger vos données.

This blog affichera le code dont vous avez besoin.

0

Une autre option, utilisez le WorkflowRuntime GetAllServices(). Ensuite, vous pouvez parcourir chacun d'eux pour extraire les données dont vous avez besoin. Je mettrais en cache les résultats, étant donné que cela pourrait être une opération coûteuse. Si vous n'avez que 100 flux de travail en cours d'exécution ou moins et seulement quelques utilisateurs sur votre page, ne dérangez pas la mise en cache.

De cette façon, vous n'avez pas besoin de créer un calque DAL ou Repo. Surtout si vous utilisez SQL pour la persistance.

http://msdn.microsoft.com/en-us/library/ms594874(v=vs.100).aspx