Χρειάζονται μερικά δεδομένα ακόμα για να μπορεί κανείς να απαντήσει. Κατ'αρχήν το θέμα (DistribTransaction) υποννοεί οτι το Business Tier είναι σε COM+. Ειναι έτσι;
Αν είναι σε COM+, μπορείς να υλοποιήσεις Transactions σε αυτό το επίπεδο. Πιθανότατα, αν δεν μπορείς ως έχει, να αντικαταστήσεις τις διαδοχικές κλήσεις στο Business με ένα Facade το οποίο ενδεχομένως θα αναλαμβάνει και το ρόλο του ξεκινητή (!) του transaction.
Για να μην γίνομαι γενικά μυστήριος και για άλλους συναδέλφους που πιθανόν διαβάζουν, το Facade είναι Design Pattern. Ο επίσημος ορισμός είναι "provides a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use".
Στη δική μας περίπτωση, επειδή δεν πάμε και πάντα by the book, αυτό που πιθανόν να θέλουμε να κάνουμε είναι να έχουμε μια κλάση που θα λεγεται Everything και από αυτή να φωνάζουμε μια μέθοδο Everything.DoAllJobsUsingTransactions.
Τώρα, αν το όλο σετ δεν είναι COM+, θα μπορούσες να υλοποιήσεις transactions σε επίπεδο ADO.NET. Προσωπικά θα έλεγα οτι είναι τζιζ να το κάνεις αυτό στο UI. Καλύτερα στο απο κάτω tier, έχει πιό μεγάλη συναφεια με το οτιδήποτε άλλο κάνει αυτό το tier.
Στην περίπτωση που χρησιμοποιείται ADO.NET transaction, τότε αυτό δεν πρέπει να εκκινείται από το Business (μια και υπάρχει data layer), αλλά να μεταβιβάζει στο data layer την απαίτηση εκκίνησης transaction.
Σωτήρης Φιλιππίδης
DotSee Web Services