J'ai un service de workflow WCF Windows Workflow (4.5) hébergé sous IIS et utilisant AppFabric 1.1. Les instances de workflow sont de longue durée (jusqu'à environ une semaine), mais une grande partie du temps est consacré aux activités de retard. Cela a semblé fonctionner correctement au début, mais lors de l'exécution de plusieurs instances du workflow en même temps (2+ instances le provoquent), certaines d'entre elles ne se réveillent jamais une fois qu'elles ont été déchargées de la mémoire pendant l'étape Delay. . Quand je regarde les journaux, les erreurs que je trouve tout ressemblent à ceci:Le flux de travail hébergé AppFabric ne se recharge pas toujours après un délai/un déchargement
System.OperationCanceledException: The execution of InstancePersistenceCommands has been canceled because the InstanceHandle was freed.
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.WaitAndHandleStoreEventsCallback(IAsyncResult result)
Malheureusement, je ne trouve aucune information utile sur ce message d'erreur.
Les champs SuspensionExceptionName et SuspensionReason dans la table InstFabric Persisted Instances montrent System.NullReferenceException: référence d'objet non définie sur une instance d'un objet. Mais cela n'arrive pas dans mon flux de travail, seulement à l'extérieur.
Informations additionnelles:
- Je me présente l'activité comme un feu & Oublie (activité de réception, pas d'envoi)
- Mon flux de travail appelle à d'autres services WCF pour récupérer les données.
- Je cours ceci sur le serveur 2012 R2, IIS 8 (pas azur)
- La persistance de workflow fonctionne. Je peux réinitialiser IIS, redémarrer ... c'est juste quand je cours 2 instances qu'il a des problèmes. Je ne suis absolument pas en train de limiter les limitations. Alors que le workflow traite de quelques Mo de données, ce problème se produit sur 2+ instances.
Une idée de ce qui pourrait se passer ici?
Editer: J'ai réalisé que j'avais trouvé plus d'informations sur le fonctionnement du problème et je ne l'ai jamais ajouté à la question. Lorsque le problème de délai se produit, il fonctionne beaucoup comme une variable statique écrite par 2 threads.
Voici une visualisation:
WF1 Start ---->Do Stuff--->Sleep------------*1----->Cancelled Exception at some point
------WF 2 Start---->Do Stuff------->Sleep->Wake up---------*2------>More Stuff---->End Successfully
*1 - When WF Instance 1 Should Wake up (Same time as WF 2 wakes)
*2 - When WF Instance 2 Should have woken up (Seems to be ignored)
Avant que quelqu'un ne demande ... je me suis débarrassé de chaque variable statique, méthode, classe dans mon code. Rien n'est plus statique.
Merci pour la réponse! Cela ressemble à un problème différent de ce que j'ai (mon problème n'arrivera que lorsque plusieurs instances sont présentes et fonctionne plus comme une variable statique écrasée par un fil.) L'un se réveille au mauvais moment et l'autre ne se réveille jamais. up) ... Mais je garderai cela à l'esprit pour les longs délais. – ChrisG