2008-10-10 7 views
2

Comment effectuer une transaction de base de données dans laquelle je crée un nouvel enregistrement puis effectuer un appel à un service Web en utilisant le nouvel ID d'enregistrement renvoyé par la base de données qui manipulera également la même base de données ? Je pourrais évidemment mettre à jour toutes les tables directement à partir du même objet SQLConnection mais la logique dans l'appel de service Web est susceptible de changer et j'ai vraiment besoin de m'assurer que les modifications apportées par mon code sont validées par les changements apportés par le service web appelé.Maintien des transactions SQL sur les appels de service Web .Net

Répondre

4

Si le service Web a la responsabilité de manipuler la base de données, je voudrais étendre le service Web pour effectuer les actions que votre code est en train de faire. Le point d'utiliser le service Web est (devrait être) de séparer votre code d'avoir à traiter directement avec la base de données. L'introduction de la manipulation directe de DB dans votre code va simplement rendre les choses plus compliquées et plus difficiles à maintenir.

0

Ce n'est pas quelque chose que vous voulez dans une transaction réelle. Les transactions doivent être aussi courtes que possible, ce qui signifie qu'il n'y a pas d'interaction de l'utilisateur au milieu ou dans le cas présent, en attente d'un service Web. En ce qui concerne votre problème, si vous avez le contrôle du service Web, modifiez le service Web pour effectuer un appel de procédure stockée qui effectue la transaction entière. S'il y a des actions qui DOIVENT être complétées chaque fois que le service est appelé, elles devraient faire partie du service. Je pense que vous n'avez pas le contrôle sur le service Web, ou ce ne serait pas un problème. Comment le service Web accède-t-il à la base de données? Si vous utilisez déjà une procédure stockée, vous devriez pouvoir ajouter la logique nécessaire. Encore une fois, je suppose que ce n'est pas le cas ou cela n'aurait pas posé de problème. Ma suggestion est que vous essayez de changer le service Web pour s'adapter à cette architecture si possible. En supposant que le service Web accède directement aux tables (beurk), vous devrez mettre du code dans votre indicatif qui fait l'insertion, appelle le service Web, puis vérifie si le service Web a fait ce qu'il était censé faire faites, et si ce n'est pas le cas, votre code prend les mesures nécessaires pour tout annuler. C'est fondamentalement comme un moteur de transaction développé localement. C'est aussi très désordonné et a tendance à être sujettes aux insectes et difficile à maintenir. Sans parler, ce n'est pas une preuve complète à 100%.

Questions connexes