Προγραμματισμός

Πώς να εργαστείτε με υπηρεσίες συναλλαγών WCF

Το WCF (Windows Communication Foundation) είναι μια ασφαλής, αξιόπιστη και επεκτάσιμη πλατφόρμα ανταλλαγής μηνυμάτων για την ανάπτυξη υπηρεσιών στο .Net.

Μια συναλλαγή είναι ένα σύνολο δηλώσεων που εκτελούνται ακολουθώντας τις αρχές ACID (ACID σημαίνει ατομικές, συνεπείς, απομονωμένες και ανθεκτικές λειτουργίες). Όταν μία από τις λειτουργίες στο μπλοκ συναλλαγών αποτύχει, ολόκληρη η συναλλαγή ματαιώνεται, δηλαδή, ολόκληρη η συναλλαγή αποτυγχάνει. Το WCF παρέχει υποστήριξη για κατανεμημένες συναλλαγές. Μπορείτε να αξιοποιήσετε την κλάση TransactionScope που υπάρχει στο System.Transactions namespace για αποτελεσματική διαχείριση συναλλαγών όταν εργάζεστε στο .Net.

Εφαρμογή συναλλαγών WCF

Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να δημιουργήσουμε υπηρεσίες συναλλαγών WCF. Για να ξεκινήσετε, δημιουργήστε δύο υπηρεσίες WCF. Μπορείτε επίσης να δημιουργήσετε ένα άλλο έργο (μια κονσόλα ή ένα έργο Ιστού) για να δοκιμάσετε τις υπηρεσίες σας. Μόλις δημιουργηθούν οι δύο υπηρεσίες WCF, θα πρέπει να διακοσμήσετε τις συμβάσεις λειτουργίας που θα αποτελούσαν μέρος της συναλλαγής με το χαρακτηριστικό TransactionFlow. Αυτό απαιτείται για την ενεργοποίηση της υποστήριξης συναλλαγών.

Αυτό το χαρακτηριστικό αποδέχεται το Enaction TransactionFlowOption ως παράμετρο. Το TransactionFlowOption μπορεί να έχει μία από τις ακόλουθες τιμές:

  • TransactionFlowOption. Επιτρέπεται
  • TransactionFlowOption.Mandatory
  • TransactionFlowOption.Δεν επιτρέπεται

Όταν εργάζεστε με το WCF, πρέπει πρώτα να δημιουργήσετε μια σύμβαση παροχής υπηρεσιών και, στη συνέχεια, να ορίσετε τις λειτουργίες ή τις συμβάσεις λειτουργίας σε αυτήν. Έχετε πολλούς διαφορετικούς τύπους συμβάσεων στο WCF - συμβάσεις υπηρεσιών, συμβάσεις δεδομένων, συμβάσεις σφάλματος, συμβάσεις μηνυμάτων και συμβάσεις λειτουργίας. Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε συμβόλαια υπηρεσιών και συμβόλαια λειτουργίας, καθώς τα άλλα μπορούν να είναι προαιρετικά. Ένα ServiceContract χρησιμοποιείται για τον καθορισμό των λειτουργιών που είναι διαθέσιμες για να καταναλώσει ο πελάτης υπηρεσίας. Σε αυτήν την ενότητα θα δημιουργήσουμε δύο συμβόλαια υπηρεσιών για τις δύο υπηρεσίες WCF που χρησιμοποιούμε.

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να διαμορφώσετε το χαρακτηριστικό TransactionFlow στο συμβόλαιο υπηρεσίας WCF για να παρέχετε υποστήριξη συναλλαγών. Σημειώστε ότι πρέπει να κάνετε το ίδιο και στα άλλα συμβόλαια λειτουργίας (που αποτελούν μέρος της συναλλαγής) επίσης.

[ServiceContract]

δημόσια διεπαφή IOrderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

άκυρο AddOrder (Παραγγελία παραγγελίας).

}

Σημειώστε ότι κάθε σύμβαση παροχής υπηρεσιών πρέπει να έχει ένα ή περισσότερα συμβόλαια λειτουργίας για να καθορίσει τις λειτουργίες που εκτίθενται μέσω του καλωδίου. Ένα συμβόλαιο λειτουργίας χρησιμοποιείται για τον καθορισμό της υπογραφής της μεθόδου εξυπηρέτησης και επίσης της ροής συναλλαγής, της κατεύθυνσης της λειτουργίας της υπηρεσίας και προαιρετικά, τυχόν συμβάσεων (ες) σφάλματος που ενδέχεται να σχετίζονται.

Δείτε πώς θα μοιάζει η διασύνδεση IOrderHeaderService (σύμβαση υπηρεσίας).

[ServiceContract]

δημόσια διεπαφή IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

άκυρο AddOrderHeader (OrderHeader orderHeader);

}

Στη συνέχεια, θα πρέπει να διασφαλίσετε ότι η μέθοδος υπηρεσίας σας είναι διακοσμημένη με TransactionScopeRequired χρησιμοποιώντας το χαρακτηριστικό OperationBehavior. Στην ουσία, πρέπει να ορίσετε την ιδιότητα TransactionScopeRequired σε "true" στη σύμβαση λειτουργίας όπως φαίνεται στο παρακάτω απόσπασμα κώδικα. Η δήλωση TransactionScopeRequired = true χρησιμοποιείται για να καθορίσει ότι η λειτουργία της υπηρεσίας χρειάζεται ένα πεδίο συναλλαγής για να εκτελεστεί.

[OperationBehavior (TransactionScopeRequired = true)]

δημόσιο άκυρο AddOrder (Παραγγελία παραγγελίας)

{

// Γράψτε κώδικα εδώ για να προσθέσετε μια εγγραφή παραγγελίας στη βάση δεδομένων

}

Η ίδια αλλαγή ισχύει και για την άλλη λειτουργία υπηρεσίας.

[OperationBehavior (TransactionScopeRequired = true)]

δημόσιο άκυρο AddOrderHeader (OrderHeader orderHeader)

{

// Γράψτε κώδικα εδώ για να προσθέσετε μια εγγραφή κεφαλίδας παραγγελίας στη βάση δεδομένων

}

Το επόμενο βήμα είναι να διαμορφώσετε το αρχείο διαμόρφωσης υπηρεσίας ώστε να ενεργοποιήσετε τη ροή συναλλαγών. Υποθέτοντας ότι χρησιμοποιείτε το wsHttpBinding, δείτε πώς μπορείτε να ρυθμίσετε τις παραμέτρους της υπηρεσίας WCF ώστε να παρέχει υποστήριξη ροής συναλλαγών.

Λάβετε υπόψη ότι όταν εργάζεστε με υπηρεσίες συναλλαγών WCF, μπορείτε προαιρετικά να καθορίσετε αξιόπιστα μηνύματα για να μειώσετε την πιθανότητα ματαιωμένων συναλλαγών λόγω αποτυχιών επικοινωνίας. Θα πρέπει επίσης να ρυθμίσετε τις παραμέτρους των τελικών σημείων υπηρεσίας WCF ώστε να αξιοποιήσετε τη δέσμευση που μόλις ορίσαμε.

bindingConfiguration = "Transactional" contract = "Services.IOrderService">

Τώρα θα πρέπει να επωφεληθείτε από την κλάση TransactionScope που υπάρχει στο System.Transactions namespace για να καλέσετε τις υπηρεσίες σας μέσα από ένα πεδίο συναλλαγών. Συνήθως, μπορείτε να χρησιμοποιήσετε αυτήν την κλάση για να εφαρμόσετε το εύρος συναλλαγών για τον χειρισμό αλληλεξαρτώμενων συναλλαγών και να επιλύσετε συγκρούσεις ταυτότητας κατά την εργασία με το ADO.Net.

δοκιμάστε

{

χρησιμοποιώντας (TransactionScope transaksiScope = νέο TransactionScope (TransactionScopeOption.RequiresNew))

  {

// Γράψτε τον κωδικό εδώ για να καλέσετε τις μεθόδους εξυπηρέτησης των υπηρεσιών σας εδώ

transaksiScope.Complete ();

  }

}

σύλληψη

{

// Γράψτε κώδικα εδώ για να χειριστείτε τις εξαιρέσεις

}

Και αυτό πρέπει να κάνετε. Τώρα μπορείτε να εκτελέσετε την αίτησή σας και να δοκιμάσετε τις υπηρεσίες συναλλαγών σας.