Même session avec plusieurs activités SendActivity dans WF
-
05-07-2019 - |
Question
Notre flux de travail dans Workflow Foundation appelait les services Web ASMX à l'aide de l'activité InvokeWebService , qui dispose d'une propriété SessionId permettant de corréler plusieurs activités dans la même session (en envoyant le cookie de session ASP.NET à chaque demande ). Cela a fonctionné.
Nous sommes maintenant passés à l'interface de service Web WCF et nous avons modifié nos flux de travail pour utiliser plutôt l'activité SendActivity . Cependant, nous n’avons trouvé aucune solution permettant de corréler les appels de service Web, c’est-à-dire d’envoyer le cookie de session à chaque demande.
Est-il possible d'atteindre cet objectif dans WF ou avons-nous besoin d'une solution personnalisée?
La solution
Je ne connais aucune installation intégrée permettant de gérer les cookies dans les activités d'intégration WF / WCF ( SendActivity et ReceiveActivity ). Cela a du sens, car WCF est agnostique en matière de transport et que, par conséquent, les API ne peuvent pas être couplées à des fonctionnalités spécifiques à HTTP, comme dans le cas des services Web ASMX .
Dans votre cas, une solution pourrait consister à exposer les services WCF via un terminal utilisant le basicHttpBinding , compatible avec le protocole pris en charge par les services Web ASMX, puis à revenir à l’utilisation du InvokeWebServiceActivity pour les appeler.
De plus, puisqu'un service WCF peut être exposé via n'importe quel nombre de points de terminaison , vous pouvez simplement ajouter un point de terminaison utilisant la propriété basicHttpBinding à ceux déjà présents. Voici un exemple:
<configuration>
<system.serviceModel>
<services>
<service name="MyNamespace.MyServiceImpl">
<endpoint binding="wsHttpBinding" name="WsHttp"
contract="MyNamespace.IMyService" />
<endpoint address="basic" binding="basicHttpBinding" name="BasicHttp"
contract="MyNamespace.IMyService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost/myservice" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Ensuite, les flux de travail utilisant InvokeWebServiceActivity appellent le service à l'aide de l'URL suivante: