Question

Nous sommes en train de construire un système qui résume toutes sortes de détails techniques sur les services Web d'autres systèmes. C'est un peu comme un bus d'entreprise, mais c'est un peu plus.

Nous avons décidé d'utiliser Windows Workflow pour traiter les demandes. Dès que nous déterminons le type d'action demandé, nous entamons un flux de travail spécialement conçu pour gérer l'action. Certains des services Web que nous allons appeler sont asynchrones. Le flux de travail doit donc attendre une réponse. L'idée de base est que nous allons implémenter le service Web de rappel et que, lorsque le rappel arrive, il «donne» ses données au flux de travaux en cours qui attend la réponse.

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

  1. le ExternalDataExchangeService
  2. le service WorkflowQueuingService

Le premier service est relativement facile à utiliser, mais il est basé sur les événements. Par conséquent, 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 d'avoir reçu la réponse synchrone nous indiquant que nous allons recevoir un rappel sous peu.

Le deuxième service semblait parfait, mais son utilisation peut être très limitée. Mettre 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 ne semble possible que dans le remplacement d'exécution d'une activité. Comme nous avons beaucoup de flux de travail différents, nous avons une classe de flux de travail de base qui effectue certains travaux dans son remplacement d'initialisation et aimerait beaucoup pouvoir créer la file d'attente ici, de sorte que nous n'aurons pas à créer un fichier spécial "Initialize". activité que chaque flux de travail devrait commencer. Nous souhaitons également que l’avis concernant la réception d’un nouvel élément fasse partie de la classe de base. Ainsi, le flux de travail spécifique devra attendre un WaitHandle pour savoir qu'il y a des données dans la file d'attente. Enfin, nous souhaitons pouvoir lire les données de la file d'attente à partir d'une activité de code sur le flux de travaux spécifique (une fois que WaitHandle est signalé).

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

Était-ce utile?

La solution 2

Il se trouve que mon hypothèse était fausse. J'étais à 100% sûr d'avoir testé le scénario et rencontré des problèmes, mais après une discussion avec un collègue, je l'ai retesté et le ExternalDataExchangeService fonctionnait parfaitement. Inutile donc de trouver une solution plus complexe. Pour l'instant, nous utilisons uniquement le ExternalDataExchangeService.

Autres conseils

Dans WF, toutes les communications entre le ou les services d’exécution et les flux de travail réels reposent sur une file d’attente. ExternalDataExchangeService semble utiliser des événements, mais il ne s’agit que d’une mince couche entourant les mécanismes WorkflowQueuingService et WorkflowQueue.

En général, je préfère utiliser 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top