Freitag, 7. September 2007

Verschiedene DLL-Versionen in einem Workflow verwenden

Die Windows Workflow Foundation hat einiges zu bieten! In vielen Fällen wird es bei der Verwendung von Workflows zu längeren "Laufzeiten" kommen. D.h. zwischen den verschiedenen Schritten kann es natürlich durchaus vorkommen, dass mal Tage Wochen oder noch mehr Zeit vergeht. Während dieser "inaktiven" Zeit wird der Workflow zwischengespeichert (z.B. auf einem SQL-Server). Damit kann auch ein Serverreboot oder Ähnliches die Wiederaufnahme des Workflows nicht verhindern.
Bei der Speicherung des Workflows wird ein komplettes Abbild des aktuellen Zustandes gespeichert. Das bedeutet, dass alle Einstellungen etc. weggespeichert werden, somit auch die Zustände eigener Klassen (z.B. der Wert einer Property o.ä).
Was ist aber wenn sich während der Zeit eines ruhenden Workflows eine neue Version der eigenen Klassen und deren DLL auf den Server gespielt wird (z.B. bei einem Workflow in einer ASP.NET-Anwendung), und diese Version neue, erforderliche Properties verwendet oder noch schlimmer - alte nicht mehr vorhanden sind? Bei Wiederaufnahme des Workflows würde eine derartige Änderung ev. in einer Exception enden und das Programm/Workflow könnte nicht zu Ende geführt werden.
Dafür gibt es eine einfache Lösung: man verwendet den GAC anstatt dem bin-Verzeichnis der Web-Anwendung, da im GAC veschiedenen Versionen einer DLL abgelegt werden können. Alte Worklfows könnten damit auf die "alte Art und Weise" beendet werden, neue könnten die neue Version verwenden.

Keine Kommentare: