2010-12-13 2 views
5

J'ai un flux de travail WF4 avec plusieurs fonctions de réception.Echec des activités de réception multiples en WF4 lorsque la persistance est activée

Le flux de travail fonctionne correctement jusqu'à ce que j'ajoute de la persistance. J'ai créé les tables de persistance et ajouté ce qui suit à la configuration \ \ system.serviceModel \ comportements \ serviceBehaviors section de mon web.config:

<behavior> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true" /> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <sqlWorkflowInstanceStore connectionStringName="InstanceStore" 
     instanceCompletionAction="DeleteAll" 
     instanceLockedExceptionAction= "NoRetry" 
     instanceEncodingOption="None" 
     hostLockRenewalPeriod="00:01:00" 
     /> 
    </behavior> 

Le flux de travail accepte un paramètre qui est une instance d'un POCO WorkflowInstanceDTO je défini.

Quand je lance le flux de travail avec le code suivant

var wfi = new WFService.WorkflowInstanceDTO() 
    { 
     Id = 1, 
     InstanceId = new Guid(), 
     Description = "Awesome WFI", 
     WorkflowId = 1 
    }; 
    proxy.Create(wfi); 

Il échoue sur la ligne de proxy.Create avec l'erreur suivante.

Une clé d'instance de valeur '11e5cf14-c2a8-0fbf-d3b5-c12a91c174ff' existe déjà. Cela peut être dû au fait que plusieurs MessageQuerySets définis évaluent la même CorrelationKey.

Lorsque la persistance n'est pas activée, je n'obtiens pas cette erreur. Est-ce que quelqu'un a vu ça? Qu'est-ce que je fais mal?

Répondre

1

Initialisez-vous la corrélation et vos activités de réception sont-elles corrélées sur la même clé? Vous allez vouloir lire sur la corrélation basée sur le contenu si vous ne l'avez pas déjà fait.

Ajoutez une variable de flux de travail appelée "sharedHandle" de type CorrelationHandle et dans votre appel Create, initialisez "sharedHandle" avec un "Initialisateur de corrélation de requêtes". La propriété serait quelque chose que tous les appels recevraient accepter comme argument.

Questions connexes