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?

Était-ce utile?

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:

  

http: // localhost / myservice / basic

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