Μαϊτης Αντώνιος

24
ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020 Υπηρεσίες και Συναλλαγές Παγκόσμιου Ιστού Θέμα : Οι Υπηρεσίες Ιστού σε περιβάλλον .NET, και το Windows Communication Framework. Μαϊτης Αντώνιος Email : [email protected] 1

Transcript of Μαϊτης Αντώνιος

Page 1: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Υπηρεσίες και Συναλλαγές Παγκόσμιου Ιστού

Θέμα :

Οι Υπηρεσίες Ιστού σε περιβάλλον .NET, και το Windows Communication Framework.

Μαϊτης Αντώνιος

Email : [email protected]

1

Page 2: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Εισαγωγή

Στην σύγχρονη αυτή εποχή οι ραγδαίες εξελίξεις στην τεχνολογία φαντάζουν αδύνατες στην επαρκή παρακολούθηση τους ως γενικό σύνολο. Η έρευνα αυτής της εργασίας εκπονείται στα πλαίσια του μαθήματος Υπηρεσίες και Συναλλαγές Παγκοσμίου Ιστού του τμήματος Εφαρμοσμένης Πληροφορικής και επικεντρώνεται στις υπηρεσίες ιστού σε περιβάλλον .ΝΕΤ και σε ένα πλαίσιο για την οικοδόμηση προσανατολισμένα δοσμένων υπηρεσιών σε εφαρμογές (service- oriented applications) με την ονομασία Windows Communication Framework (WCF).

2

Page 3: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Web Services

Η υπηρεσία ιστού είναι έννοια που πρόσφατα βρέθηκε στο προσκήνιο χάρη σε μια τεχνολογία ανταλλαγής μηνυμάτων γνωστή ως SOAP. Υπηρεσίες δικτύου ονομάζονται όλες εκείνες οι ομαδοποιημένες τεχνολογίες που προσανατολίζονται διαδικτυακά. Οι υπηρεσίες αυτές έχουν γίνει πλέον ένα σημαντικό κομμάτι κινητήριας δύναμης για τις περισσότερες και μεγαλύτερες εταιρίες παγκοσμίως. Η χρησιμότητα τους προσαρμόζεται για πελάτες υπαλλήλους και προμηθευτές οι οποίοι μέσω αυτών εξυπηρετούνται με μεγάλη διεκπεραιωτική ικανότητα από πολλά και απομακρυσμένα γεωγραφικά σημεία. Τα web services βασίζονται σε ανοιχτά πρότυπα όπως HTTP, XML και SOAP. Οι clients ανταλλάσουν δεδομένα με τις υπηρεσίες χρησιμοποιώντας αυτά τα πρότυπα οπότε η εγγραφή μιας υπηρεσίας σε λειτουργικό διαφορετικού τύπου από αυτού που θα γίνει η εκτέλεση φαίνεται εκτός από πραγματοποιήσιμη και αρκετά εύκολη. Οι υπηρεσίες ιστού κατά κανόνα έχουν καταγραφεί όλες με το όνομα τους, ή τουλάχιστον όλες εκείνες των οποίων ο δημιουργός τις έχει συμπεριλάβει στον κατάλογο UDDI. Αυτός ο κατάλογος αποτελεί το συγκεντρωτικό όλων και είναι για ην αναζήτηση των υπηρεσιών από μηχανές και όχι από εμάς. Το μέλλον των υπηρεσιών ιστού κρίνεται ραγδαία αναπτυσσόμενο αλλά και βάση για οποιαδήποτε άλλη ανάπτυξη στον χώρο του διαδικτύου. Μια υπηρεσία Ιστού είναι μια διεπαφή με κάποια εφαρμογή που επιτυγχάνεται με τη βοήθεια τεχνολογιών Διαδικτύου, συνήθως τεχνολογιών Ιστού. Τυπικά παραδείγματα υπηρεσιών Ιστού είναι ένα αίτημα για την τιμή μιας μετοχής ή ενός μερίσματος, ένα αίτημα για διαθέσιμες θέσεις σε μια συγκεκριμένη πτήση, ένα αίτημα για την παραγγελία και αποστολή ενός βιβλίου ή ένα αίτημα για τη βέλτιστη διαδρομή από μια πόλη σε μια άλλη.

Αρχιτεκτονική υπηρεσιών Ιστού

Μια αρχιτεκτονική web services φαίνεται σε ένα απλό παράδειγμα όπου ένας περιηγητής παράγει αιτήματα προς ένα διακομιστή Ιστού ή προς ένα πρόγραμμα που φέρεται ως διακομιστής Ιστού το οποίο στην ουσία καταλαβαίνει HTTP. Τα αιτήματα αποκωδικοποιούνται από τον διακομιστή , ο οποίος στη συνέχεια προσπελαύνει μια συγκεκριμένη

3

Page 4: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

εφαρμογή. Μια αρχιτεκτονική υπηρεσίας Ιστού έχει δύο τμήματα. Ένα τμήμα ανεξάρτητο από πλατφόρμα υλοποίησης, που εκπροσωπείται από τα μέρη της αρχιτεκτονικής που χρησιμοποιούν ανοικτά πρωτόκολλα του Διαδικτύου, όπως HTTP και FTP, και ένα τμήμα εξειδικευμένο σε συγκεκριμένη πλατφόρμα υλοποίησης, όπως LINUX ή Windows. Η βασική ιδέα πίσω από τις υπηρεσίες Ιστού είναι ότι βασίζονται στα μηνύματα, δηλαδή, χρησιμοποιούν ανοικτά τυποποιημένα πρωτόκολλα όπως το HTTP για την ανταλλαγή μηνυμάτων για την κλήση υπηρεσιών. Μια αρχιτεκτονική υπηρεσίας Ιστού υλοποιείται σε πέντε επίπεδα. Αυτά ορίζονται ως ανακάλυψη, περιγραφή, πακετάρισμα, μεταφορά και δίκτυο. Η ανακάλυψη είναι ένα επίπεδο που επιτρέπει τους πελάτες που αναζητούν κάποια υπηρεσία Ιστού να ανακτήσουν περιγραφές της υπηρεσίας Ιστού από τους παροχείς. Αυτές περιλαμβάνουν και καθορισμό της διεπαφής με την υπηρεσία, δηλαδή τι μηνύματα αναμένει και τι είδους αποκρίσεις στέλνει. Υπάρχουν διάφορα πρότυπα για το επίπεδο της ανακάλυψης, όπως το WDDI και το WS-inspection. Η περιγραφή είναι tο επίπεδο που παρέχει περιγραφή των πρωτοκόλλων δικτύου, πακεταρίσματος και μεταφοράς που χρησιμοποιεί η υπηρεσία και πρέπει να χρησιμοποιηθούν για την επικοινωνία μαζί της. Υπάρχουν αρκετά αναδυόμενα και προτεινόμενα πρότυπα γι' αυτό το επίπεδο όπως το WDSL και το RDF του W3 Consortium. Το πακετάρισμα περιγράφει τη μορφή των δεδομένων που θα ανταλλαχθούν με την υπηρεσία Ιστού. Ποιά δεδομένα πρέπει να αποσταλούν προς τη υπηρεσία για κάθε αίτημα και ποιά δεδομένα θα αποστείλει η υπηρεσία ως απόκριση σε κάποιο αίτημα. Εδώ χρησιμοποιείται το SOAP. Η μεταφορά περιλαμβάνει τις τεχνολογίες που χρησιμοποιούνται για την αποστολή και παραλαβή μηνυμάτων. Αυτές περιλαμβάνουν τα πρωτόκολλα TCP, HTTP, POP3, SMTP και FTP. Τέλος το δίκτυο αντιστοιχεί στο επίπεδο δικτύου του πολυεπιπέδου μοντέλου του Διαδικτύου. Παρέχει τις βασικές υπηρεσίες για επεξεργασία λαθών, αποστολή μηνυμάτων, λήψη μηνυμάτων, επικοινωνία με ξένους υπολογιστές και δρομολόγηση.

XML Web Services

Τα XML Web Services είναι εφαρμογές που εκτελούνται πάνω σε έναν web server και κάνουν expose API functions, ή Web Methods, τα οποία

4

Page 5: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

μπορούν να χρησιμοποιηθούν από clients στο Internet. Ουσιαστικά η ολοκληρωμένη ενέργεια που γίνεται είναι η εισαγωγή από μέρους του χρήστη ενός αιτήματος και η απόκριση από την υπηρεσία με το ζητούμενο αποτέλεσμα. Ένα τέτοιο παράδειγμα είναι το Virtual Earth όπου ο χρήστης εισάγει γεωγραφικές συντεταγμένες και αυτό επιστρέφει την ακριβή τοποθεσία πάνω στον χάρτη.

.ΝΕΤ

Ο χώρος της πληροφορικής έχει πραγματοποιήσει στροφή από stand-alone εφαρμογές και client/server εφαρμογές, σε λύσεις που ζουν και τρέχουν στο web και είναι το ίδιο λειτουργικές και προσβάσιμες όσο και οι μη διαδικτυακές εφαρμογές. Ακόμη και στις γλώσσες προγραμματισμού έχουμε την μεταπήδηση από compiled σε scripting γλώσσες, από rich GUIs σε HTML και από τον αντικειμενοστραφή προγραμματισμό σε εμπορικές πλέον κατασκευασμένες εφαρμογές από έναν πετυχημένο συνδυασμό HTML, DHTML, XML, COM κτλ. Το .ΝΕΤ είναι ένα σύνολο από εργαλεία τα οποία συνδυάζονται για να φέρουν εις πέρας την μετατροπή του Internet σε μια πλατφόρμα παροχής υπηρεσιών λογισμικού. Ένα σημαντικό κομμάτι της προσφοράς του είναι ότι προσφέρει ευκολίες ώστε να χρησιμοποιήσουμε το διαδίκτυο ως μέσω μεταφοράς των αρχείων της εφαρμογής μας, με πολύ εύκολο τρόπο (ClickOnce). Επίσης πολύ σημαντική είναι η δυνατότητα που μας δίνει ένα κομμάτι του συνόλου των εργαλείων του για RAD (Rapid Application Development) , δηλαδή την ταχεία ανάπτυξη εφαρμογών. Αυτό το επιτυγχάνει δίνοντας στον χρήστη τη δυνατότητα να χρησιμοποιεί έτοιμα και αποδοτικά κομμάτια κώδικα αλλά και ένα σύνολο κλάσεων που βοηθούν τον προγραμματιστή να κερδίσει χρόνο αλλά και απόδοση για τα project του.

.NET CLR

Ένα από τα βασικά στοιχεία του .ΝΕΤ είναι το .NET CLR. Η λειτουργία αυτού είναι γραφικής εικονικής φύσης. Στην πράξη ενεργεί στο λειτουργικό σύστημα παρέχοντας του ένα εικονικό περιβάλλον για το hosting των διαχειριζόμενων εφαρμογών. Το CLR φορτώνει modules

5

Page 6: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

που περιέχουν εκτελέσιμα και τρέχει τον κώδικά τους. Ο κώδικα μπορεί να χαρακτηριστεί ως διαχειρίσιμος ή όχι , στην κανονική του ορολογία managed or unmanaged. Σε κάθε περίπτωση το CLR κρίνει πως θα ενεργήσει με αυτά. Ο διαχειρίσιμος κώδικας αποτελείται από εντολές γραμμένες σε γλώσσα ψευδοκώδικα η οποία ονομάζεται CIL ( common intermediate language ). Οι εντολές αυτής της γλώσσας γίνονται compile just in time σε native κώδικα στο run time. Οι μέθοδοι γίνονται συνήθως μια φορά JIT compile πριν κληθούν για πρώτη φορά και έπειτα κρατούνται στην μνήμη και παραμένουν εκεί για όλη την διάρκεια λειτουργίας της εφαρμογής. Επίσης το CLR περιλαμβάνει ένα garbage collector ο οποίος καταγράφει τις αναφορές στα αντικείμενα και τα καταστρέφει όταν η μνήμη που καταλαμβάνουν δεν γίνεται πλέον referenced και χρειάζεται κάπου αλλού. Ένα πλεονέκτημα που έχει είναι ότι μπορεί να εκτελέσει κώδικα ο οποίος έχει μεταγλωττιστεί από C#, J#, C, C++, VB και Jscript σε CIL αλλά και με χρήση μεταφραστών για άλλες γλώσσες.

Garbage Collector

Η εκτέλεση του Garbage Collector δεν γνωρίζουμε πότε θα κληθεί εκτός αν τον καλέσουμε επίτηδες με την εντολή => GC.Collect();) . Πρακτικά τρέχει όποτε το σύστημα χρειάζεται μνήμη. Όταν κληθεί καθαρίζει όλα τα διαχειρίσιμα αντικείμενα που έχουμε δημιουργήσει. Το CLR χρησιμοποιεί έναν από τους πολλούς αλγορίθμους του Garbage Collector και συγκεκριμένα εκείνον που αντιστοιχεί σε κάθε αντικείμενο που δημιουργείτε σε μια γενιά από objects. Στο .ΝΕΤ υπάρχουν τρείς γενιές από αντικείμενα (0,1,2). Κάθε νέο δημιουργημένο αντικείμενο αντιστοιχίζεται στη γενιά 0. Όταν εκτελεστεί το Garbage Collector και παραμείνει το αντικείμενο αυτό τότε παίρνει προαγωγή στο επίπεδο 1. Ο Garbage Collector αφού κάνει collect στη γενιά 0 και δεν επαρκεί η μνήμη τότε θα κάνει collect στη γενιά 1 και ούτω καθεξής. Ο Garbage Collector επίσης κάνει release κρατώντας στη μνήμη του δείκτες που ονομάζονται roots. Μέσω των roots o Garbage Collector ξέρει ποια αντικείμενα χρησιμοποιούνται και ποια όχι. Με αυτήν την ιδιότητα που έχει καταλαβαίνουμε πως το release που κάνει είναι πετυχημένο και συγκεκριμένο. Για να αποφευχθεί το πρόβλημα του να γίνει collect ένα αντικείμενο το οποίο 'κρέμεται' από κάποιο άλλο, ο Garbage Collector

6

Page 7: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

δημιουργεί object graphs με τα αντικείμενα που είναι στη μνήμη κάθε φορά που εκτελείται. Για όλους τους παραπάνω λόγους και όχι μόνο, είναι πασιφανές ότι το Garbage collection έχει μεγάλο overhead.

Περιοχές Εφαρμογής

Ο παραδοσιακός τρόπος να απομονώνεις την μία εφαρμογή από την άλλη είναι να τις κάνεις host σε διαφορετικά processes. Αυτή η μέθοδος απαιτεί μεγάλη κατανάλωση μνήμης. Η αποτελεσματικότητα στην διαχείριση μνήμης δεν είναι σημαντική σε client εφαρμογές, με συστήματα ενός χρήστη, αλλά είναι κρίσιμη στην περίπτωση των servers οι οποίοι διαχειρίζονται χιλιάδες χρήστες. Το CLR μπορεί να φιλοξενήσει πολλές εφαρμογές σε ένα process. Αυτό γίνεται με το να διαχωρίζει το process σε εικονικές περιοχές οι οποίες ονομάζονται περιοχές εφαρμογής ή με την κανονική ορολογία application domains. Το CLR δεν ξεκινάει ένα νέο process για κάθε εφαρμογή. Αντί αυτού, τρέχει μία διαδικασία ή ένα σύνολο διαδικασιών και φιλοξενεί όλες τις ξεχωριστές εφαρμογές στα application domains. Τα application domains είναι ασφαλή όπως και τα processes γιατί σχηματίζουν όρια τα οποία δεν μπορούν να παραβιάσουν οι managed εφαρμογές. Ωστόσο τα application domains είναι πιο αποτελεσματικά από τα processes γιατί ένα process μπορεί να φιλοξενήσει πολλά application domains αλλά και γιατί οι βιβλιοθήκες μπορούν να φορτωθούν σε application domains και να διαμοιραστούν σε όλους.

Managed Κώδικας

Διαχειρίσιμος ή managed κώδικας είναι κώδικας ο οποίος έχει σχεδιαστεί να τρέχει υπό τον έλεγχο του CLR. Τα modules του managed κώδικα είναι συνήθως της μορφής .ΕΧΕ, .DLL, ή NETMODULE. Κάθε module managed κώδικα περιέχει τέσσερα στοιχεία, το Windows Portable Executable File Header, τα Μεταδεδομένα, τα οποία περιγράφουν το module και τις εξωτερικές συσχετίσεις του, το CLR Header, όπου αποθηκεύονται πληροφορίες για την θέση του CIL και το πού βρίσκονται τα μεταδεδομένα και τις πραγματικές CIL εντολές που δημιουργήθηκαν από τον πηγαίο κώδικα.

7

Page 8: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Windows Portable Executable File Header

Τα εκτελέσιμα αρχεία ονομάζονται ELF στα *nix και PE στα WIN32 συστήματα. Όταν πάμε να εκτελέσουμε ένα .exe τότε το λειτουργικό και ποιο συγκεκριμένα ο Process Loader του λειτουργικού ψάχνει το header του αρχείου για να ελέγξει αν είναι έγκυρος (valid). Αν ικανοποιεί την εγκυρότητα το εκτελεί. Στην περίπτωση που έχουμε εγκατεστημένο το .ΝΕΤ framework στο μηχάνημα μας τότε ο process loader τροποποιείται έτσι ώστε μόλις δει ένα managed application να δώσει τον έλεγχο στο CLR.

Μεταδεδομένα

Ο όρος μεταδεδομένα χαρακτηρίζει δεδομένα που αφορούν άλλα δεδομένα. Κατά κανόνα, ένα σύνολο μεταδεδομένων περιγράφει ένα άλλο σύνολο δεδομένων, το οποίο αποτελεί μια πηγή. Στον κόσμο του .ΝΕΤ τα μεταδεδομένα τα μεταδεδομένα είναι μια περιοχή του module στην οποία περιγράφεται το ίδιο το module. Τα μεταδεδομένα μοιάζουν με τις COM βιβλιοθήκες, μιας και περιγράφουν τις ιδιότητες κάθε στοιχείου του Module (attributes, location, dependencies, properties, fields κτλ).

Assemblies

Tα assemblies είναι συλλογές ενός ή περισσότερων αρχείων τα οποία ομαδοποιούνται για να σχηματίσουν μια λογική μονάδα και είναι παρόμοια με το concept του “package” στην Java και την Lisp. Τα αρχεία μπορούν να βρίσκονται σε οποιοδήποτε κατάλογο ξεκινώντας από το root της εφαρμογής (εκεί που εκτελέστηκε το .exe ή .dll αρκεί να υπάρχει σωστή αντιστοίχιση στα references. Μπορούν ακόμη να βρίσκονται και στην GAC. Τα assemblies δημιουργούνται χρησιμοποιώντας ένα εργαλείο που ονομάζεται AL (Assembly Linker). Η δομή του assembly ορίζεται στο “manifest” μια περιοχή μέσα στο assembly η οποία περιέχει τα στοιχεία όνομα, μια λίστα αρχείων μαζί με τα κρυπτογραφικά hashes, μια λίστα τύπων δεδομένων που εξάγονται και εισάγονται από άλλα αρχεία, αριθμό έκδοσης και culture string ( π.χ. en-US).

8

Page 9: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Ισχυρά και μη, ονόματα για Assemblies

Υπάρχουν δύο τύποι για assemblies: Τα ισχυρά και τα όχι- ισχυρά ονόματα (strongly and weakly named assemblies). Τα μη-ισχυρά ονόματα δεν χρησιμοποιούν κρυπτογραφικές υπογραφές για να ταυτοποιήσουν τα ονόματα των στοιχείων και δεν μπορούν να βρίσκονται στην Global Assembly Cache(GAC). Τα ισχυρά ονόματα περιέχουν το publisher’s key και τις ψηφιακές υπογραφές που χρησιμοποιήθηκαν για να αποθηκευτούν τα components στο GAC – κάτι το οποίο βοηθάει τον έλεγχο των εκδόσεων (version checking). Αυτό είναι σημαντικό όταν τα components δημιουργούνται έτσι ώστε να μπορούν να χρησιμοποιηθούν από πολλούς χρήστες. Το .NET SDK έχει ένα utility, το οποίο ονομάζεται SN, το οποίο δημιουργεί strongly named assemblies αλλά και το AL μπορεί επίσης να χρησιμοποιηθεί για να δημιουργήσει strongly named assemblies. Επίσης το VS.NET μπορεί να δημιουργήσει SN assemblies. Τυπικά, το VS.NET θα συμπεριλάβει ένα κλειδί και μία υπογραφή, εάν έχετε κάποια.

.NET Framework Class Library (FCL)

Ένα ακόμη βασικό στοιχείο του .ΝΕΤ είναι το .NET Framework Class Library (FCL). Γενικά υπάρχουν περισσότεροι από 7000 τύποι classes, structs, interfaces, enumarations και delegates στο .net framework class library. Οι τύποι αυτοί είναι οργανωμένοι σε ένα σύνολο ιεραρχικών Namespaces. Είναι αξιοσημείωτο ότι υπάρχει μεγάλη συνάφεια με τα concepts της Java. Τα ονόματα αυτά εισάγονται μέσω C# και VB imports.

GUIs – Graphical User Interfaces

Μέχρι πρόσφατα, τα περισσότερα μοντέρνα προγράμματα χρησιμοποιούν ένα GUI όχι μόνο κείμενο αλλά και χαρακτήρες: παράθυρα, μενού, κουμπιά κτλ. Από αυτά user χαρακτηρίζεται το φυσικό πρόσωπο που χρησιμοποιεί το πρόγραμμα. Interface ορίζεται ο τρόπος αλληλεπίδρασης με το πρόγραμμα ενώ τα τυπικά γραφικά στοιχεία αποτελούν τα παράθυρα που εμφανίζουν τον γραφικό τρόπο επικοινωνίας του χρήστη με την μηχανή τα menu με τις επιλογές και τα

9

Page 10: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

ενέργειες επικοινωνίας και τα κουμπιά με τις εντολές που μας δίνεται η δυνατότητα να επιλέξουμε.

Event-Driven Προγραμματισμός

Τα προγράμματα GUIS χρησιμοποιούν συχνά Event-Driven Προγραμματισμό. Η μέθοδος αυτή βοηθάει λειτουργώντας ως ανταποκριτής αφού το πρόγραμμα περιμένει να συμβούν κάποια events για να ανταποκριθεί. Τέτοιου είδους events είναι το κλικ του ποντικιού, το drag , το πάτημα ενός κουμπιού στο πληκτρολόγιο κτλ. Ορισμένες ορολογίες στο θέμα αυτό είναι το firing an event όταν ένα αντικείμενο δημιουργεί ένα γεγονός, το listener-object όπου περιμένει να συμβεί κάποιο event και το event handler που είναι η μέθοδος που απαντάει στο event. Η διαφορά με τον παραδοσιακό λοιπόν προγραμματισμό είναι ότι αντί για λίστα εντολών έχουμε τα αντικείμενα που ενεργοποιούν τα γεγονότα και τα αντικείμενα που απαντούν σε γεγονότα – αποκρίσεις. Επίσης στον παραδοσιακό προγραμματισμό το πρόγραμμα εκτελείται από τον υπολογιστή ενώ εδώ η εκτέλεση εξαρτάται από αλληλεπιδράσεις του χρήστη με τον υπολογιστή εξηγώντας πως το τι θα εκτελείται αφορά και καθορίζεται από τα events.

Soap

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

10

Page 11: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

WCF Web Services

Οι υπηρεσίες αυτές είναι χτισμένες χρησιμοποιώντας το Windows Communication Framework, εργαλείο που αποτελείται από ποικιλία βιβλιοθηκών και διευκολύνσεων για την εξυπηρέτηση του προγραμματισμό ως προς την ευκολία και συνεργασία για την συγγραφή υπηρεσιών ιστού. Οι υπηρεσίες που δημιουργούνται ακολουθούν την λογική ότι βρίσκονται σε έναν server και υπάρχουν ενδιαφερόμενοι πελάτες που κάνουν χρήση αυτών. Η λογική της χρήσης των υπηρεσιών ακολουθεί το μοντέλο πολλά προς πολλά από την άποψη ότι μία υπηρεσία μπορεί να χρησιμοποιείται από πολλούς πελάτες αλλά και ένας μόνο πελάτης μπορεί να χρησιμοποιεί πολλές υπηρεσίες. Οι υπηρεσίες του WCF ακολουθούν το Web Services Description Language Interface κι έτσι καθίσταται δυνατή η χρήση από οποιονδήποτε WCF client θεωρώντας στην πράξη αμελητέο στοιχείο το λειτουργικό στο οποίο γίνεται το Hosting. Οι υπηρεσίες του WCF γίνονται Host στον IIS Server της Microsoft, στον οποίο επιβάλλεται να υπάρχει εγκατεστημένο το .NET Framework για να μπορέσουν να λειτουργήσουν σωστά οι υπηρεσίες. Ο τρόπος που οι υπηρεσίες γίνονται Host, μοιάζει πολύ με τον τρόπο που ακολουθείτε για τις ιστοσελίδες, μόνο που εδώ αντί να κάνουμε request στο server για να πάρουμε μια ιστοσελίδα, κάνουμε request στο service στέλνοντάς του δεδομένα, και το service με τη σειρά του μας στέλνει ένα response με κάποια άλλα δεδομένα.

Δημιουργία WCF Web Service

Βήμα 1:

Ανοίγουμε το Visual Studio 2010 και επιλέγουμε File>New>Project και στη συνέχεια επιλέγουμε στα Templates τη Visual C#>WCF και διαλέγουμε το Template WCF Template Application. Στη συνέχεια αφού δώσουμε το όνομα που θέλουμε στο project μας, πατάμε ΟΚ.

11

Page 12: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Βλέπουμε λοιπόν ότι το Visual Studio δημιούργησε το project μας και στον Solution Explorer φαίνονται τα παρακάτω αρχεία:

Ας δούμε λοιπόν κάποια πράγματα για τα αρχεία αυτά:

IService1.cs:

Αποτελεί το interface του service που θα δημιουργήσουμε. Το αρχείο αυτό περιέχει τις δηλώσεις των μεθόδων που θα χρησιμοποιήσουμε στο

12

Page 13: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

service μας, καθώς επίσης και τις δηλώσεις των αντικειμένων (object) που θα χρησιμοποιήσουμε.

Service1.svc.cs:

Αποτελεί την υλοποίηση των συναρτήσεων που αναφέρονται στο interface που περιγράψαμε πιο πάνω. Στο αρχείο αυτό περιγράφονται και υλοποιούνται αναλυτικά οι μέθοδοι που χρησιμοποιούμε.

Βήμα 2:

Ας δούμε ένα απλό σενάριο μιας WCF υπηρεσίας. Έστω λοιπόν ότι θέλουμε να έχουμε μια μέθοδο στην οποία θα στέλνουμε ένα string και θα μας επιστρέφει το μήνυμα “Hello World, “+το string που στείλαμε. Αν στείλουμε για παράδειγμα “StudentGuru”, θέλουμε να μας επιστρέψει “Hello World, StudentGuru”.

Η μέθοδος που αναφέρουμε θα μπορούσε να υλοποιείται ως εξής:

        public string helloworld(string str)        {            string message = "Hello World, " + str;            return str;        }Για να χρησιμοποιήσουμε την παραπάνω μέθοδο στο service μας, θα πρέπει να κάνουμε τα εξής 2 πράγματα:

1.πρέπει να δηλώσουμε τη μέθοδό μας στο Interface του service (IService1.cs).

2.πρέπει να δηλώσουμε την υλοποίηση της μεθόδου μας στο service(Service1.svc.cs).

Για το 1ο βήμα, πηγαίνουμε στο αρχείο IService1.cs, και προσθέτουμε τα εξής μέσα στο σώμα του public interface IService1

        [OperationContract]        string helloworld(string str);

Με τον τρόπο αυτό, ενημερώνουμε το service για τη μέθοδό μας, για να ξέρει πώς να χειριστεί τα δεδομένα που θα στείλουμε, και να γνωρίζει τι θα είναι αυτό που θα μας επιστρέψει. Τώρα λοιπόν γνωρίζει το service

13

Page 14: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

ότι όταν εμείς θα καλέσουμε τη μέθοδο helloworld, θα του στείλουμε και ένα string κατά την κλήση της μεθόδου, ενώ όταν η μέθοδος ολοκληρωθεί, θα μας επιστρέψει ένα string.Για το 2ο βήμα, πηγαίνουμε στο αρχείο Service1.svc.cs, και προσθέτουμε τα εξής, μέσα στο σώμα της public class Service1:

IService1        public string helloworld(string str)        {            string message = "Hello World, " + str;            return message;        }Βλέπουμε λοιπόν ότι η κλάση Service1 υλοποιεί το Interface IService1.Έχοντας δηλώσει λοιπόν τον ορισμό (definition) της μεθόδου helloworld στο Interface IService1, στην κλάση Service1 δηλώνουμε την υλοποίηση του Service αυτού. Στο σημείο αυτό, μπορούμε να τρέξουμε το service που έχουμε φτιάξει για να δούμε αν και κατά πόσο λειτουργεί.

Βήμα 3ο:

Από το Visual Studio, επιλέγουμε run (F5) και παρατηρούμε ότι τρέχει ο IISServer πάνω στον οποίο «σηκώνεται» και το service που έχουμε φτιάξει:

Παράλληλα, ανοίγει το εργαλείο WCF Test Client, το οποίο θα μας βοηθήσει στο debugging. Σε περίπτωση που δεν σας ανοίγει το εν λόγω εργαλείο, μπορείτε να το βρείτε στο παρακάτω path: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe

14

Page 15: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Βήμα 4ο:

Αυτό που μας επιτρέπει να κάνουμε το WCF Test Client είναι να στέλνουμε δεδομένα στο service που έχουμε φτιάξει και να μας δείχνει τι επιστρέφει η κάθε μέθοδος που καλούμε, ώστε να ξέρουμε αν λειτουργεί σωστά τοservice μας. Κάνουμε διπλό κλικ στη μέθοδο helloworld() που δημιουργήσαμε πιο πάνω, και στη συνέχεια γράφουμε το string που θέλουμε να στείλουμε στο πεδίοValue του str στο παράθυρο του Request, και επιλέγουμε Invoke, για να δούμε τι θα επιστρέψει η μέθοδος:

15

Page 16: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Βλέπουμε λοιπόν στο πεδίο Response το αποτέλεσμα που επιστρέφεται από το service μας:

Έτσι διαπιστώνουμε ότι το service που έχουμε δημιουργήσει λειτουργεί σωστά. Ακολουθώντας λοιπόν αυτήν την διαδικασία που περιγράψαμε μπορούμε να προσθέσουμε και άλλες μεθόδους στο service μας οι οποίες μπορεί να είναι πολύ πιο σύνθετες συγκριτικά με το hello world. Μπορούμε για παράδειγμα να γράφουμε σε βάσεις δεδομένων, να εκτελούμε πολύπλοκα queries και άλλα σχετικά.

16

Page 17: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Επίλογος

Η έρευνα που έγινε κρατάει πλέον δεδομένο ότι για να χρησιμοποιήσει κάποιος αποτελεσματικά το Framework πρέπει να έχει μία στερεή γνώση στον Αντικειμενοστραφή Προγραμματισμό. Λέγοντας ‘στερεή γνώση’ δεν εννοώ τόσο τις τεχνικές λεπτομέρειες, όσο την ποιοτική κατανόηση των δυνατοτήτων που προσφέρει στην μοντελοποίηση και την αρχιτεκτονική ενός συστήματος. Φυσικά, πολλές από τις νέες τεχνολογίες είναι καταπληκτικές. Όποιος έχει αναπτύξει κατανεμημένες εφαρμογές χρησιμοποιώντας παλαιότερες τεχνολογίες όπως DCOM και COM+ ή ακόμα και .NET Remoting ή XML Web Services δεν μπορεί παρά να θαυμάσει την ευελιξία, την κομψότητα και την παραγωγικότητα που προσφέρει και αναμένεται να δώσει περισσότερα στο μέλλον το Windows Communication Foundation (WCF).

17

Page 18: Μαϊτης Αντώνιος

ΜΑΪΤΗΣ ΑΝΤΩΝΗΣ it1020

Βιβλιογραφία:

Αρχιτεκτονική Πλατφόρμας Υπηρεσιών Ιστού (Sanjiva Weerawarana, Francisco Curbera, Frank Leyman, Tony Storey, Donald F. Fergunson – Επιστημονική επιμέλεια Ελληνικής έκδοσης Δρ. Χρήστος Κ. Γεωργιάδης)

C# 4.0 in a Nutshell: The Definitive Reference (In a Nutshell (O'Reilly)

Professional WCF Programming : net development with the Windows C.( Klein, Scott )

Πτυχιακή: Γεράσιμος Μηνιάτης ‘Η τεχνολογία των Web Services’

Ευχαριστώ θερμά:

Studentguru.gr

WCFtutorial.net

Allinonetraining.gr

18