2012-03-28 2 views
0

Supposons qu'il existe un service de flux de travail A. WF A peut avoir plusieurs instances (en utilisant CanCreateInstance). Maintenant, supposons qu'il existe WF B, qui est différent (dans le contenu), mais avec les mêmes caractéristiques que WF A. Pour que WF A finisse, il doit appeler WF-B n (déterminé dynamiquement) (chaque fois avec des arguments différents, bien sûr).Service de workflow 4 pour générer (envoyer et recevoir) plusieurs services de flux de travail en parallèle

flux pseudo pourrait être:

Instance of WF-A: 
    // WF is instantiated 
    // do some activities 
    parallel-foreach (product in Products) 
     Send & Receive to a different instance of WF-B with parameter product 
    // do some activities 
    // WF-A is done 

La seule question est: Comment peut-on implémenter un tel système?

+0

est-WF Un appel de la même instance de WF B chaque fois? – scmccart

Répondre

0

Il y a deux choses à noter;

Il existe deux manières d'appeler un service dans un fichier WF.

  • Une façon utilise Send-Receive messagerie style activités, dans lequel on doit indiquer l'adresse du service (ou point final de configuration), ainsi que le nom de la méthode & des arguments (y compris leurs noms).
  • L'autre façon consiste à utiliser une référence de service. Lors de l'utilisation d'une telle référence, Visual Studio créera une activité dédiée pour chaque méthode de service. Cela semble être une manière native et utilise une abstraction d'activité WF (utilisez-la de cette façon si possible!).

Notez que le fichier .XAMLX, qui représente déclarative le service WF, pointera à l'activité de référence de service spécifique, qui est, par la suite livré dans la dll du projet qui XAMLX réside.

Remarque également que l'activité de référence de service générée pointe vers une liaison de client de configuration WCF. Depuis WF-A est un client de WF-B.

Par conséquent, vous pouvez effectuer les opérations suivantes:

  1. Faites ce que vous voulez dans WF-A - il suffit d'utiliser WF-B avec l'aide de l'activité de référence de service.

  2. Le hôte de WF-A doit avoir une référence à l'ensemble dans lequel réside WF-A.XAMLX (ce qui signifie que l'hôte aura l'activité WF-B à partir de sa référence de service). Ce qui signifie que le XamlX, en lui-même, n'est pas suffisant pour l'hôte.

  3. Ajouter une référence de service (avec le même espace que celui utilisé dans WF-Ensemble) à WF-B dans le hôte de WF-A, modifier la configuration du client de l'hôte en supprimant les grands espaces de noms dans la section client dans le nom du contrat (IServiceB au lieu de ServiceReference.IServiceB)

La dernière étape pourrait être remplacée par la configuration des liaisons client par vous-même, mais il est beaucoup plus facile en utilisant une référence de service (que vous pouvez également mettre à jour)

0

Vous ne savez pas exactement ce que vous demandez: vous devriez être capable de mettre une activité Sequence dans une activité ParallelForEach et de placer des activités d'envoi et de réception dans la séquence.

Voici un exemple sur la façon d'utiliser ParallelForEach:

http://msdn.microsoft.com/en-us/library/dd647810.aspx

Questions connexes