2012-03-17 4 views
0

Fond: J'utilise WF 4.0. Mon application Web et mon flux de travail s'exécutent sur une batterie de serveurs (4 machines). Toutes les références de l'application Web au workflow utilisent "http: // localhost/..". La persistance du flux de travail est conservée sur une base de données à l'aide de SQL Server 2005. Fonctionnant sur Windows Server 2008.InstanceLockedException: Comment gérer les problèmes de verrouillage avec WF 4.0?

Scénario: ServerA crée un nouveau flux de travail et le traitement est terminé lorsqu'il atteint une activité de sélection contenant des activités de réception en tant que branches. Juste avant l'activité de sélection, un indicateur spécifique à l'application est défini dans la base de données pour indiquer que le flux de travail est prêt à écouter la requête suivante. Un signet est créé dans la base de données de persistance du flux de travail. ServerB utilise la corrélation pour reprendre le flux de travail existant et le traitement continue jusqu'à ce qu'il atteigne l'activité de prélèvement suivante. Et ainsi de suite.

Le scénario ci-dessus fonctionne correctement dans la plupart des cas, sauf lorsque ServerB tente de reprendre le flux de travail peu de temps après la définition de "l'indicateur spécifique à l'application". Ce drapeau est une action personnalisée qui me permet d'informer l'utilisateur qu'il peut continuer avec l'opération suivante. CEPENDANT, dans la plupart des cas, cela échouera avec une exception InstanceLockedException. Le serveur montre qu'il y a eu un certain nombre de tentatives, puis il tente de rediriger vers un autre serveur avant de lancer une autre exception appelée RedirectionException.

Actuellement ma configuration de WCF est défini comme suit:

<sqlWorkflowInstanceStore connectionString="[conn str]" 
instanceEncodingOption="None" 
instanceCompletionAction="DeleteNothing" 
instanceLockedExceptionAction="BasicRetry" 
hostLockRenewalPeriod="00:00:30" 
runnableInstancesDetectionPeriod="00:00:05" /> 

Je ne sais pas si je devrais utiliser AgressiveRetry ou modifier les périodes de renouvellement et de détection ... Ou si je dois faire quelque chose de totalement différent . Votre contribution est grandement appréciée.

Répondre

1

Assurez-vous de régler timeToUnload et timeToPersist sur 00:00:00. C'est le paramètre recommandé pour les hôtes wf équilibrés en charge.

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

+0

Merci Peter! Votre solution était ce qui manquait dans ma configuration. – Cesar

+0

Sentez-vous libre de le marquer comme la réponse :) –

+0

Chaque fois que j'essaie de voter comme réponse, je reçois une invite indiquant que je dois avoir un représentant de 15 ou plus. – Cesar

Questions connexes