Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Sharepoint Workflows: Dehydrated Instance - Teil 2

In einem Blogeintrag vom 20. Juli 2007 habe ich bereits über diese Fehlermeldung berich­tet und einen Lösungsweg auf­ge­zeigt. In einem aktu­el­len Projekt trat der Fehler jedoch erneut auf, dies­mal mit einer ande­ren Ursache.

Entwickelt wurde ein auto­ma­tisch ablau­fen­de­ner Workflow für den MOSS 2007, der manu­ell sofort oder mit fest­ge­leg­ter Startzeit gestar­tet wer­den wer­den konnte. Um den ver­zö­ger­ten Start zu rea­li­sie­ren wurde eine DelayActivity ein­ge­setzt.

Eine erste pro­to­ty­pi­sche Implementierung zeigte einen inter­es­san­ten Effekt: Der Workflow funk­tio­nierte ohne Probleme, wenn er sofort gestar­tet wurde. Kam jedoch die DelayActivity für einen ver­zö­ger­ten Start zum Einsatz, wurde der Workflow-Status sofort auf "Beendet" gesetzt. Die Aktionen, die laut Workflow aus­ge­führt wer­den soll­ten, blie­ben unbe­ach­tet. Eine Fehlermeldung fand sich nur nach inten­si­ver Suche im Sharepoint-Log:

DehydrateInstance: System.Runtime.Serialization.SerializationException: End of Stream encoun­te­red before par­sing was com­ple­ted.

Trotzdem in die­sem Workflow keine InfoPath-Dokumente ver­wen­det wur­den, gab die Exception den ent­schei­de­nen Hinweis: Es gibt ein Problem mit der Serialisierung. Anders als im vor­an­ge­gan­gen Blogeintrag lag das Problem nicht bei der Serialisierung der Daten, die von einem Formular über­ge­ben wer­den, son­dern bei der Serialisierung des Workflows selbst. Eine Bereinigung bzw. Konvertierung der Attribute der Workflowklasse brachte letzt­lich den Erfolg. Hierzu sei anzu­mer­ken, dass beson­ders die Sharepoint-Klassen SP* in den meis­ten Fällen nicht seria­li­sier­bar sind.

Abschließend bleibt noch die Frage, warum der Fehler nur beim ver­zö­ger­ten Start des Workflows auf­tritt. Dies lässt sich mit der Grundfunktionalität der Windows Workflow Foundation erklä­ren. Die in Sharepoint inte­grierte Workflow Runtime ver­wal­tet alle Workflowinstanzen. Wird eine sol­che Instanz mit­tels einer DelayActivity ange­hal­ten, wird diese aus Speicher- und Performancegründen per­sis­tent aus­ge­la­gert. Für diese Auslagerung muss die Instanz natür­lich seria­li­siert wer­den. Ohne die DelayActivity wird die Instanz im Speicher gehal­ten, bis der Workflow been­det wurde. Der Fehler tritt also nicht auf.

14. September 2007
||

Related Posts

Pin It on Pinterest