2009-01-08 4 views
1

Notre flux de travail dans Workflow Foundation utilisé pour appeler ASMX services Web en utilisant la activité InvokeWebService, qui possède une propriété SessionId pour établir une corrélation entre plusieurs activités dans la même session (en envoyant Cookie de session ASP.NET à chaque demande). Ça a marché.même session avec plusieurs activités SendActivity dans WF

Maintenant, nous avons passé à WCF interface de service Web, et nous avons changé nos flux de travail pour utiliser la place activité SendActivity. Cependant, nous n'avons trouvé aucune solution pour corréler les invocations de service Web, c'est-à-dire envoyer le cookie de session à chaque requête.

Est-il possible de réaliser cela en WF, ou avons-nous besoin d'une solution personnalisée?

Répondre

0

Je ne suis pas au courant d'aucune installation intégrée pour la gestion des cookies dans toute l'intégration WF/WCF activités (SendActivity et ReceiveActivity). Cela est logique puisque WCF est indépendant du transport, et donc à un niveau élevé, les API ne peuvent pas être couplées à des fonctionnalités spécifiques à HTTP comme dans le cas de ASMX Web Services.

Une solution dans votre cas pourrait être d'exposer les services WCF par un point final qui utilise le basicHttpBinding, qui est compatible avec le protocole pris en charge par ASMX Web Services, puis revenir à l'utilisation du InvokeWebServiceActivity pour les invoquer .

De plus, étant donné qu'un service WCF peut être exposé via à un nombre quelconque de points d'extrémité, vous pouvez simplement ajouter un point de terminaison qui utilise basicHttpBinding à ceux qui sont 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 qui utilisent le InvokeWebServiceActivity invoquerait le service en utilisant l'adresse suivante:

http://localhost/myservice/basic

Questions connexes