Ich habe eine Windows-Workflow-Instanz, die SQL-Persistenz verwendet und in der Web-Laufzeit gehostet wird, da die Workflows durch ASP.NET-Formularübertragungen gestartet werden. Die meiste Zeit läuft es prima, aber ich habe festgestellt, dass es Fälle gibt, in denen ich Dinge abbrechen muss:
Ich stelle fest, dass der nextTimer weit überfällig ist, sogar um Stunden. Manchmal sind die Felder ownerID und ownedUntil in der Persistenzdatenbank null, manchmal nicht. Die Felder "unlocked" und "blocked" sind immer beide "1".
...und dann die Workflow-Laufzeit nicht abholen es wieder, bis ich null out die "Eigentümer" Felder, wenn sie ausgefüllt sind und treten Sie die Anwendung-Pool mit einem recycle, und die Dinge gehen entlang gerade fein nach, dass zum größten Teil. Es gibt keine Fehler (ich habe Try/Catch-Blöcke um alles und schreiben Sie alles gefangen in eine Trace-Datei), so dass es nicht ist.
Die Verzögerungsaktivitäten, die die Persistenz verursachen, sind alle auf eine Minute eingestellt, und die Besitzdauer für die Laufzeit beträgt ebenfalls 60 Sekunden. Der Code, an dem er hängen bleibt, sollte immer weniger als eine Minute dauern.
Wie ich dies schreibe, bin ich neugierig, wenn Rezyklen der app-Pool/App-Domäne es verursachen... wenn der Workflow versucht, welche Methode in der Laufzeit aufrufen, ist es beschäftigt Spinning bis die app-Domäne/Pool und könnte über die 60 Sekunden Besitzdauer lecken. Das klingt im Entferntesten plausibel, und würde das dazu führen, dass es nicht richtig rehydrieren?
Abgesehen von diesem Ablenkungsmanöver, was könnte dieses Verhalten, das ich sehe, verursachen? Ich möchte nicht jeden Tag auf die Runtime aufpassen, indem ich steckengebliebene Workflows auftrenne.