Fehlerbehandlung in Workflows

Die Fehlerbehandlung in Windows Workflow Foundation bezieht sich auf die asynchrone Behandlung von Ausnahmen. Dies bedeutet, dass in einer Aktivität (explizit oder implizit) ausgelöste Ausnahmen vom Workflow-Laufzeitmodul erfasst und anschließend in einer Warteschlange für die Abwicklung zu einem späteren Zeitpunkt eingeplant werden. Dies unterscheidet sich insofern von der normalen Handhabung von Ausnahmen, dass beim Auslösen einer Ausnahme in einem try-Block die Ausnahme entweder vom entsprechenden catch exception-Block erfasst oder direkt für den Benutzer ausgelöst wird.

Ursachen von Ausnahmen

In einem Workflow können Ausnahmen auf die folgenden Weisen generiert werden:

Abfangen von Ausnahmen

Bei der Fehlerbehandlung wird die Ausnahme zur Auflösung an die übergeordnete Aktivität übertragen, falls die Ausnahme nicht von der Aktivität behandelt werden kann, von der sie ausgelöst wurde. Die Ausnahme wird in der Workflowhierarchie nach oben übertragen, bis sie entweder behandelt wird, oder bis die Workflowinstanz vom Workflow-Laufzeitmodul beendet wird.

Die Behandlung der Ausnahme erfolgt mithilfe der FaultHandlerActivity-Aktivität. Jede FaultHandlerActivity-Aktivität wird dem .NET Framework-Ausnahmetyp zugeordnet und enthält weiterhin eine Reihe Aktivitäten, die ausgeführt werden, wenn die ausgelöste Ausnahme mit dem Ausnahmetyp übereinstimmt. Eine FaultHandlerActivity-Aktivität ist in einer FaultHandlersActivity-Aktivität übergeordnet, die 0-n FaultHandlerActivity-Aktivitäten enthält. Bei der FaultHandlersActivity-Aktivität kann es sich um eine untergeordnete Aktivität einer beliebigen zusammengesetzten Aktivität handeln.

Ziel der Fehlerbehandlung in Windows Workflow Foundation ist es, teilweise durchgeführte und nicht erfolgreiche Aufgaben einer Aktivität rückgängig zu machen, in der eine Ausnahme aufgetreten ist. Das Abschließen der FaultHandlerActivity-Aktivität wird nie als erfolgreiches Abschließen der zugeordneten Aktivität erwogen. Dies bedeutet, dass die Aktivität, für die die Ausnahme ausgelöst wurde, während der Ausführung der FaultHandlerActivity-Aktivität in den Fehlerzustand wechselt. Wird die FaultHandlerActivity-Aktivität abgeschlossen, wechselt die zugeordnete Aktivität in den Zustand Geschlossen. Außerdem wechseln sämtliche gleichgeordneten Aktivitäten der zugeordneten Aktivität, wie z. B. andere untergeordnete Aktivitäten einer ParallelActivity-Aktivität, in den Zustand Wird abgebrochen und anschließend in den Zustand Geschlossen. Diese Aktivitäten erhalten keine Möglichkeit, erfolgreich ausgeführt zu werden.

Fehlerbehandlung im Vergleich zu Kompensierung

Der Unterschied zwischen Fehlerbehandlung und Kompensierung liegt darin, dass eine Kompensierung nur bei erfolgreich abgeschlossenen Aktivitäten durchgeführt werden kann und nicht bei Aktivitäten, für die eine Ausnahme ausgelöst wurde, und die sich in einem Fehlerzustand befinden. Die CompensateActivity-Aktivität kann jedoch in einer FaultHandlerActivity-Aktivität ausgeführt werden, die einer Aktivität zugeordnet ist, für die eine Ausnahme ausgelöst wurde. Ein typisches Szenario für eine Kompensierungsbehandlung ist z. B., wenn eine Aktivität zwar erfolgreich abgeschlossen, aber später im Workflow eine Ausnahme in einer anderen Aktivität ausgelöst wird. Der Fehlerhandler für diese Aktivität enthält eine CompensateActivity, die alle zuvor durchgeführten Aktionen im Workflow rückgängig macht. Um dies weiter auszudehnen, können Sie einem Kunden das Geld zurückerstatten, nachdem später im Workflow eine ItemDiscontinuedException durch eine andere Aktivität ausgelöst wird.

Weitere Informationen zur Fehlerbehandlung finden Sie unter Verwenden der FaultHandlerActivity-Aktivität und Verwenden der ThrowActivity-Aktivität.

Weitere Informationen zur Kompensierungsbehandlung finden Sie unter Verwenden der CompensateActivity-Aktivität.

Siehe auch

Referenz

ThrowActivity

Konzepte

Verwenden der FaultHandlerActivity-Aktivität
Verwenden der ThrowActivity-Aktivität

Weitere Ressourcen

Entwickeln von Workflows

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.