Freigeben über


Persistente Speicherung und die Orchestrierungs-Engine

Statuspersistenz sowie ihre Verwaltung und Wiederherstellung bilden die Basis für viele grundlegende Funktionen der Orchestrierungs-Engine. Die Persistenz ist besonders wichtig für die ordnungsgemäße Funktionsweise folgender Elemente:

  • Pausieren und Aktivieren

  • Computeragnostische Ausführung und Aktivierung

  • Kompensierungsmodell

  • Kontrolliertes Herunterfahren des Systems

  • Wiederherstellung

    Die Orchestrierungs-Engine speichert den gesamten Status einer laufenden Orchestrierungsinstanz zu verschiedenen Zeitpunkten persistent, sodass die Instanz später vollständig wiederhergestellt werden kann. Dieser Status umfasst die folgenden Punkte:

  • Den internen Engine-Status, einschließlich seines aktuellen Fortschritts.

  • Den Status aller .NET-Komponenten, die Statusinformationen verwalten und von der Orchestrierung verwendet werden.

  • Nachrichten- und Variablenwerte.

Punkte der persistenten Speicherung

Die Orchestrierungs-Engine speichert den Status einer laufenden Orchestrierungsinstanz zu verschiedenen Zeitpunkten. Wenn die Orchestrierungsinstanz aktiviert werden muss, führen Sie nach dem kontrollierten Herunterfahren einen Systemstart oder nach einem unerwarteten Absturz eine Wiederherstellung durch. Die Orchestrierungsinstanz wird vom letzten Punkt der persistenten Speicherung an ausgeführt, als ob nichts weiter geschehen wäre. Wenn beispielsweise eine Nachricht empfangen wird und es zu einem Absturz kommt, bevor der Status gespeichert wurde, zeichnet die Engine den Empfang der Nachricht nicht auf, sodass die Nachricht nach dem Neustart erneut empfangen werden kann. Die Engine speichert den Status einer Orchestrierung unter den folgenden Umständen:

  • Das Ende eines Transaktionsbereichs wird erreicht.

    • Die Engine speichert den Status am Ende eines Transaktionsbereichs, sodass der Zeitpunkt, an dem die Orchestrierung fortgesetzt werden sollte, eindeutig definiert ist und eine Kompensierung gegebenenfalls richtig durchgeführt werden kann.

    • Die Orchestrierung wird nach Bereichsende weiterhin ausgeführt, sofern die persistente Speicherung erfolgreich war. Andernfalls wird ein entsprechender Ausnahmehandler aufgerufen.

    • Wenn der Bereich transaktional und atomarisch ist, speichert die Engine den Status am Ende des atomarischen Bereichs, wenn für diese ein Commit ausgeführt wird.

    • Ist der Bereich transaktional und wird lang ausgeführt, generiert die Engine eine neue Transaktion und speichert den gesamten Status der Laufzeit persistent, wenn der Bereich abgeschlossen ist.

  • Ein Debughaltepunkt wird erreicht.

  • Eine Nachricht wird gesendet. Die einzige Ausnahme hierzu besteht darin, wenn eine Nachricht aus einem atomarischen Transaktionsbereich gesendet wird.

  • Die Orchestrierung startet eine weitere Orchestrierung asynchron, wie bei der Form "Orchestrierung starten ".

  • Die Orchestrierungsinstanz wird angehalten.

  • Wenn die Orchestrierungs-Engine die Aufforderung zum Herunterfahren erhält, versucht sie, die Steuerinformationen und den aktuellen Status aller ausgeführten Orchestrierungsinstanzen zu speichern, sodass die Ausführung beim Neustart wieder aufgenommen werden kann. Wenn die Engine den aktuellen Status nicht speichern kann, wird die Orchestrierungsinstanz vom letzten Punkt der persistenten Speicherung vor dem Herunterfahren an ausgeführt. Dies gilt sowohl für das kontrollierte Herunterfahren des Systems als auch für die nicht ordnungsgemäße Beendigung.

  • Die Engine bestimmt, dass die Instanz pausieren soll.

  • Die Orchestrierungsinstanz ist fertig.

Serialisierung

Alle Objektinstanzen, auf die Ihre Orchestrierung direkt oder indirekt verweist (über andere Objekte), müssen serialisierbar sein, damit der Status Ihrer Orchestrierung persistent gespeichert werden kann. Hierfür gelten zwei Ausnahmen:

  • In einer atomarischen Transaktion können Sie ein nicht serialisierbares Objekt deklarieren. Dies ist möglich, da atomarische Bereiche keine Punkte der persistenten Speicherung enthalten.

  • System.Xml.XmlDocument ist keine serialisierbare Klasse. Sie wird als Sonderfall behandelt und kann überall verwendet werden.

Achtung

Um ein .NET-Objekt persistent zu speichern, müssen Sie es als serialisierbar markieren.

Hinweis

COM-Objekte können mithilfe der standardmäßigen .NET-Serialisierungsvorgänge nicht persistent gespeichert werden. Wenn Sie ein COM-Objekt außerhalb einer atomarischen Transaktion aufrufen möchten, müssen Sie das COM-Objekt in ein NET-serialisierbares .NET-Objekt einschließen, das den Status des COM-Objekts persistent speichern und wiederherstellen kann.

Herunterfahren des Systems

Wenn die Orchestrierungs-Engine die Aufforderung zum Herunterfahren erhält, versucht sie, die Steuerinformationen und den aktuellen Status aller ausgeführten Orchestrierungsinstanzen zu speichern, sodass die Ausführung beim Neustart wieder aufgenommen werden kann. Wenn die Engine den aktuellen Status nicht speichern kann, wird die Orchestrierungsinstanz vom letzten Punkt der persistenten Speicherung vor dem Herunterfahren an ausgeführt. Dies gilt sowohl für das kontrollierte Herunterfahren des Systems als auch für die nicht ordnungsgemäße Beendigung.

Wiederherstellung

Die Engine speichert die Statusinformationen einer Orchestrierungsinstanz regelmäßig im persistenten Speicher. Außerdem speichert es den Status beim Herunterfahren des Systems.

Fällt eine Orchestrierungsinstanz aus irgendeinem Grund aus, kann sie aus dem zuletzt gespeicherten Status wiederhergestellt und weiterhin ausgeführt werden, als ob es keine Unterbrechung gegeben hätte. Dies gilt selbst dann, wenn der Originalserver, der die Instanz ausgeführt hat, ausgefallen ist. Die Ausführung der Instanz kann einfach auf einem separaten Computer wieder aufgenommen werden. Aufgrund dieses Wiederherstellungsmodells mit mehreren Servern ist müssen keine Cluster erstellt werden.

Weitere Informationen

Pausieren und Aktivieren einer Orchestrierung