2009-01-07 5 views
0

Nous sommes en train de créer un système qui résume toutes sortes de détails techniques sur les services Web à partir d'autres systèmes. C'est un peu comme un bus d'entreprise, mais ça en fait un peu plus.Obtention de données dans une instance Windows Workflow

Nous avons décidé d'utiliser Windows Workflow pour gérer les demandes. Dès que nous déterminons le type d'action demandé, nous démarrons un workflow spécifiquement conçu pour gérer l'action. Maintenant, certains des services Web que nous appelons sont asynchrones, de sorte que le flux de travail doit attendre une réponse. L'idée de base est que nous allons implémenter le service web de rappel de notre côté et lorsque le rappel arrivera «en quelque sorte», il donnera ses données au flux de travail en cours d'exécution qui attend la réponse.

Jusqu'à présent, je l'ai vu deux possibilités:

  1. le ExternalDataExchangeService
  2. le WorkflowQueuingService

Le premier service est relativement facile à utiliser, mais il est basé événement, donc si vous manquez l'événement, vous manquez les données. Nous avons besoin d'une solution basée sur la file d'attente, car il est techniquement possible de recevoir le rappel d'un service Web avant même que nous ayons obtenu la réponse synchrone qui nous indique que nous recevrons un rappel sous peu.

Le deuxième service semblait parfait, mais il est très limitatif dans la façon dont il peut être utilisé. Obtenir un élément dans la file d'attente est très simple, mais nous devons nous assurer que la file d'attente existe avant de pouvoir le faire. Et la création de la file d'attente semble seulement possible dans le remplacement Execute d'une activité. Comme nous avons beaucoup de workflows différents, nous avons une classe de workflow de base qui fonctionne dans son override Initialize et aimerait beaucoup faire la création de file d'attente, donc nous n'aurons pas besoin de créer un "Initialize" spécial activité que chaque flux de travail devrait commencer avec. Nous aimerions également avoir la notification pour savoir quand un nouvel article est reçu dans la classe de base. Ainsi, le flux de travail spécifique devrait seulement attendre sur un WaitHandle pour savoir qu'il y a des données dans la file d'attente. Enfin, nous voulons être en mesure de lire les données de la file d'attente à partir d'une activité de code sur le flux de travail spécifique (après que le WaitHandle est signalé).

Est-ce que quelqu'un a une idée, n'a pas à être avec les deux services que j'ai mentionnés, mais nous aimerions vraiment garder les choses aussi simples que possible.

Répondre

0

Il s'avère que mon hypothèse était fausse. J'étais sûr à 100% que j'avais testé le scénario et rencontré des problèmes, mais après une discussion avec un collègue, je l'ai réessayé et le service ExternalDataExchangeService a fonctionné très bien. Donc, pas besoin de trouver une solution plus complexe, pour l'instant nous allons juste avec le ExternalDataExchangeService.

1

Dans WF, toutes les communications entre le runtime ou les services et les workflows réels sont basées sur la file d'attente. ExternalDataExchangeService semble utiliser des événements, mais il s'agit juste d'une couche mince autour du mécanisme WorkflowQueuingService et WorkflowQueue.

En général, je préfère utiliser le WorkflowQueuingService car il donne un contrôle total. Une fois que vous avez compris les bases, il est encore plus facile de travailler avec ExternalDataExchangeService dans la plupart des cas.

Questions connexes