Disons que vous avez une application connectant 3 systèmes externes différents. Vous devez mettre à jour quelque chose dans tous les 3. En cas d'échec, vous devez annuler les opérations. Ce n'est pas une chose difficile à implémenter, mais dites que l'opération 3 échoue, et lors de la restauration, l'annulation de l'opération 1 échoue! Maintenant, le premier système externe est dans un état invalide ...Opérations atomiques sur plusieurs systèmes externes sans transaction
Je pense qu'une solution possible est de fermer l'application et de forcer une correction manuelle du système externe, mais encore une fois ... Il pourrait déjà avoir utilisé cette information (et peut-être c'est pourquoi il a échoué), ou nous pourrions ne pas avoir un accès suffisant. Ou ce n'est peut-être même pas un bon moyen de revenir en arrière!
Y a-t-il de bons moyens de traiter de tels cas?
EDIT: Quelques détails d'application ..
Il est une application web multi-utilisateur. La plupart du travail est effectué avec des tâches planifiées (via Quartz.Net), donc la plupart des opérations sont exécutées dans son propre thread. Certaines actions utilisateur doivent déclencher des tâches qui mettent à jour plusieurs systèmes. Les systèmes externes sont quelque peu instables.
Je pensais à changer l'application à utiliser l'unité de commande et de modèle de travail
Les systèmes externes sont-ils corrigés? Ou pouvez-vous les modifier? – bmargulies