J'ai deux sources de données: une ancienne (service Web) et une base de données. Maintenant, lorsque je traite la demande, j'ai apporté des modifications aux deux. En cas d'erreur, je veux annuler les deux. Le problème est: que se passe-t-il si l'héritage hérité pendant la restauration (c'est-à-dire une erreur réseau)? db.Rollback() ne sera pas exécuté. Et vice versa. La solution que je vois est:Gestion des transactions pour deux sources de données indépendantes en une seule
legacy.Begin();
try
{
db.Begin();
try
{
legacy.MakeChanges(); db.MakeChanges();
}
except (Exception)
{
db.Rollback();
throw;
}
}
except (Exception)
{
legacy.Rollback();
throw;
}
Est-il acceptable? Y a-t-il une meilleure solution?
Je contrôle le service Web et ses sources, mais dans une certaine mesure afin que la compatibilité héritée ne soit pas rompue. Cependant, je ne pense pas que je peux investir dans sa compatibilité complète 2PC (en raison de l'horaire); Je pense que nous pouvons vivre aveC# 2 (et corriger manuellement si nécessaire). Je suis également très intéressé par le concept 2PC; pouvez-vous recommander une bonne lecture à ce sujet? Google montre de nombreux liens, principalement sur Java, alors que je préfère la lecture générale ou C#. – queen3
Un point de départ dans le monde MS est ici http://msdn.microsoft.com/en-us/library/aa213077%28SQL.80%29.aspx la capacité de service Web pour participer à un véritable 2PC est WS http Transaction atomique : //msdn.microsoft.com/en-us/library/ms733943.aspx – djna
Eh bien, merci pour l'info, c'est utile. Mais encore je pense que nous irons # 3, ce n'est pas un système critique, nous pouvons réparer les choses manuellement une fois par mois (ou même la semaine). La mise en œuvre du gestionnaire de transactions, etc., est définitivement hors budget. – queen3