Régulièrement j'entends dire que Workflow Services (WS) est moins performant que WCF. Cette belle "affirmation", qui ne devrait pas exister, montre encore à quel point Workflow Foundation est mal connu, et mal utilisé.
Pour faire simple, voici 3 arguments de poids:
1) WS utilise WCF…
2) Un service WCF classique a pour but de permettre à un utilisateur d'exécuter une méthode M() à un instant T en obtenant ou non un retour de cette méthode. On peut entrer une ou plusieurs fois dans ce service, ceci n'a pas d'importance et ne change pas la disponibilité du service.
3) Un workflow est un processus complexe évolutif et non pas une simple méthode. Utiliser WF4 comme s’il s'agissait d'une simple méthode M() est donc en soi une erreur (synonymes envisageables: infamie, abomination, branlette intellectuelle).
Pour ce qui est de WS (donc un workflow exposé via WCF) : il a pour but de permettre à un utilisateur d'exécuter une méthode M(), et de gérer côté serveur une instance de workflow en attente de l'appel d'une ou plusieurs autres méthodes. Il est clair qu'un WS est fait pour répondre à une série d'appels et non pas qu'à un seul.
Le principe de WS peut être représenté par le schéma suivant :
L'utilisateur peut faire plusieurs appels sur le service qui fera évoluer le workflow. Ce workflow pouvant être amené à gérer de nombreuses ressources externes (voir même d'autres workflows). Et les appels pouvant être espacé d’une durée plus ou moins longues (secondes, mois, années)
Du point de vue chronologique :
- Le premier appel à une méthode M() du WS instanciera le workflow. M() n'est alors plus accessible. M() reste visible par le client, mais son appel déclenchera une erreur
- L'appel à une méthode N() ou O() fera évoluer le workflow. N() ou O() ne sont alors plus accessibles.
- Les appels suivants feront de même jusqu'à ce que le workflow prenne fin. (Qaund le workflow à pris fin on peut rappeler M().
WCF ne suffisant pas à lui seul pour répondre à ce genre de besoin, voici donc le scénario dans lequel il convient d’utiliser WS et non pas un simple service WCF.
Dans un prochain article, j'expliquerai clairement comment l'hôte WS (le WorkflowServiceHost) fait la distinction entre les différentes instances de workflow présentes côté serveur.