Δικτυοκεντρικά Πληροφοριακά Συστήματα Διδάσκων: Γ. Βασιλακόπουλος - Καθηγητής, Μ. Θεμιστοκλέους - Επίκουρος Καθηγητής 1
ΜΕΡΟΣ Β - Παραδείγματα Υλοποίησης 2
Παράδειγμα 1: Υλοποίηση Web Service για ανάκτηση τιμής μετοχών Εισαγωγή Η εταιρία παροχής επιχειρηματικών συμβουλών (managers inc.) στα πλαίσια αναβάθμισης του εταιρικού site, θέλησαν να προσθέσουν μια νέα εφαρμογή η οποία θα δίδει την δυνατότητα σε απομακρυσμένους χρήστες να πληροφορηθούν την τιμή μιας μετοχής. Η εφαρμογή ονομάστηκε Web Service Stockservice Υλοποίηση Το web service Stockservice του project StockPrice είναι ένα ASP.NET web service το οποίο παρέχει τη δυνατότητα σε απομακρυσμένους χρήστες να το καλέσουν για να πληροφορηθούν την τιμή μιας μετοχής. Πρόκειται για ένα XML web service και το ASP.ΝET είναι το μέσο που χρησιμοποιούμε για τη δημιουργία ή την κατανάλωσή του. Μπορούμε να καλέσουμε τις μεθόδους του web service δικτυακά μέσω HTTP χρησιμοποιώντας το πρωτόκολλο SOAP. Τα Web Services επιστρέφουν τα αποτελέσματά τους σε μορφή XML και το πρωτόκολλο SOAP χειρίζεται αυτά τα XML μηνύματα και τα μετατρέπει σε αντικείμενα που θα χρησιμοποιηθούν από τις διάφορες εφαρμογές. Για την δημιουργία του ASP.NET Web Service χρησιμοποιήθηκε το Microsoft Visual Studio 2008 Professional Edition, ενώ για τη δημιουργία της Windows εφαρμογής για τον client χρησιμοποιήθηκε το Microsoft Visual C# Express Edition 2008. 3
Στο φάκελο App_Data βρίσκεται η βάση δεδομένων Stocks.mdf, η οποία περιέχει τις διάφορες μετοχές και τις τιμές τους. Το Stockservice έχει δύο μεθόδους. Μέσω της μεθόδου GetStockPrice συνδέεται με τη βάση Stocks και επιστρέφει στον χρήστη-πελάτη την τιμή της μετοχής που έχει ζητήσει η οποία μετοχή περνιέται ως παράμετρος στο service με τη μεταβλητή clientstock. Να σημειώσουμε εδώ πως η σύνδεση με τη βάση δεδομένων γίνεται τοπικά για να μπορεί η εφαρμογή μας να δοκιμαστεί σε ένα οποιοδήποτε μηχάνημα έχει το Visual Studio με το τοπικό server SQLEXPRESS και να μη χρειάζεται να τη μεταφέρουμε σε ξεχωριστό SQL Server. Με τη μέθοδο UpdateStockPrices ανανεώνεται η τιμή της μετοχής που επιλέχτηκε από το χρήστη με τυχαίες τιμές που παράγονται ανά ένα δευτερόλεπτο. Έτσι όταν ο χρήσης επιλέξει εκ νέου τη μετοχή θα λάβει μια διαφορετική τιμή public class Stockservice : System.Web.Services.WebService string connectionstring = WebConfigurationManager.ConnectionStrings["Stocks"].ConnectionString; [WebMethod] public string GetStockPrices(string clientstock) 4
SqlConnection con = new SqlConnection(connectionstring); string result = "0"; try con.open(); SqlCommand cmd = new SqlCommand("select * from Stock WHERE Stockname=@clientchoice", con); SqlParameter param = new SqlParameter(); param.parametername = "@clientchoice"; param.value = clientstock; cmd.parameters.add(param); SqlDataReader reader = cmd.executereader();... [WebMethod] public String UpdateStockPrices(string clientstock) string UpdateSuccess = "No update with new prices";... Αφού ανοίξουμε το project StockPrice στο Visual Studio μας μπορούμε να τρεξουμε το Stockservice πατώντας Ctrl+F5 5
Επιλέγουμε τη μέθοδο GetStockPrices του StockService και στη παράμετρο clientstock βάζουμε τα αρχικά ATE της Αγροτικής Τράπεζας για να καλέσουμε δοκιμαστικά το service και να μας επιστρέψει την τιμή της μετοχής 6
Πατάμε το invoke και παρατηρούμε ότι το web service λειτουργεί και επιστρέφει το αποτέλεσμα σε μορφή XML. 7
Αφού εξασφαλίσαμε ότι το web service λειτουργεί κανονικά καθώς όταν δέχεται ως παράμετρο το συμβολικό όνομα μιας μετοχής, επιστρέφει την τιμή της που είναι καταχωρημένη στη βάση δεδομένων Stocks, δημιουργούμε μια απλή Windows Form εφαρμογή μέσω της οποίας ο χρήστης θα μπορεί να καλεί το service και να πληροφορείται την τιμή της μετοχής. Έτσι με τη βοήθεια του εργαλείου Microsoft C# Express Edition 2008 δημιουργούμε το project WinStockClient Όπως μπορούμε να δούμε έχει προστεθεί το Web Reference StockPriceService για να μπορεί η Windows εφαρμογή μας να έχει άμεση πρόσβαση στο web service Stockservice και στις μεθόδους του. Πατώντας Ctrl+F5 έχουμε 8
Αρκεί ο χρήστης να πατήσει με το ποντίκι πάνω στο όνομα μιας από τις μετοχές της λίστας για να καλέσει το web service και να πληροφορηθεί την τιμή της μετοχής Πατώντας το δεξί πλήκτρο του ποντικού πάνω στο όνομα της ΕΓΝΑΚ θα πάρουμε ως αποτέλεσμα τη νέα της τιμή καθώς η βάση δεδομένων έχει ενημερωθεί μέσω της μεθόδου UpdateStockPrices. 9
Κώδικας Υλοποίησης using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; using System.Web.Configuration; using System.Data.SqlClient; namespace StockPrice /// <summary> /// Summary description for Stockservice /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, 10
uncomment the following line. // [System.Web.Script.Services.ScriptService] public class Stockservice : System.Web.Services.WebService string connectionstring = WebConfigurationManager.ConnectionStrings["Stocks"].ConnectionString; [WebMethod] public string GetStockPrices(string clientstock) SqlConnection con = new SqlConnection(connectionstring); string result = "0"; try con.open(); SqlCommand cmd = new SqlCommand("select * from Stock WHERE Stockname=@clientchoice", con); SqlParameter param = new SqlParameter(); param.parametername = "@clientchoice"; param.value = clientstock; cmd.parameters.add(param); SqlDataReader reader = cmd.executereader(); while (reader.read()) result = reader["stockprice"].tostring(); finally if (con!= null) con.close(); return result; [WebMethod] 11
public String UpdateStockPrices(string clientstock) string UpdateSuccess = "No update with new prices"; while (true) System.Threading.Thread.Sleep(1000); Random RandomNumber = new Random(); double RandomPrice = RandomNumber.NextDouble()*5; RandomPrice = Convert.ToDouble(RandomPrice.ToString("0.00")); SqlConnection conupdate = new SqlConnection(connectionstring); try conupdate.open(); SqlCommand cmdupdate = new SqlCommand("UPDATE Stock SET Stockprice=@Stockprice WHERE Stockname=@stockname", conupdate); SqlParameter param1 = new SqlParameter(); param1.parametername = "@Stockprice"; param1.value = RandomPrice; SqlParameter param2 = new SqlParameter(); param2.parametername = "@stockname"; param2.value = clientstock; cmdupdate.parameters.add(param1); cmdupdate.parameters.add(param2); cmdupdate.executenonquery(); UpdateSuccess = "Updated prices"; finally if (conupdate!= null) conupdate.close(); return UpdateSuccess; 12
Παράδειγμα 2: Διασύνδεση Web site πιτσαρίας Εισαγωγή Η εταιρία PizzaExpress με υποκαταστήματα σε Ομόνοια, Πειραιάς και Χαλάνδρι στην προσπάθεια της για καλύτερη προσέγγιση του πελάτη και παροχή υπηρεσιών από το ανανεωμένο web site της θέλησε να εντάξει μια εφαρμογή η οποία θα δίδει στον χρήστη την δυνατότητα επιλογής από το List of Value μιας σειράς από επιλογές σχετικά με το κατάστημα που θέλει να επιλέξει. Ώστε, χρησιμοποιώντας το web site και με βάση την περιοχή που επιθυμεί να εμφανίζεται το όνομα του ιδιοκτήτη και το τηλέφωνο επικοινωνίας του κάθε καταστήματος. Υλοποίηση : Δημιουργία και χρήση του ASP.NET Web Service με Visual Web Developer Δημιουργία ενός απλού XML Web service με το Visual Web Developer. Δημιουργία ενός Web site που χρησιμοποιεί το παραπάνω Web service. Για τη δημιουργία ενός Web service 1. Ξεκινάμε το Visual Web Developer. 2. Πηγαίνουμε στην επιλογή μενού File, και επιλέξτε New Project. Project types -> Visual C# -> Web Στα Visual Studio installed templates, επιλέγουμε ASP.NET Web Service. 3. Στο κάτω μέρος, στο πεδίο Name πληκτρολογούμε: PizzaDirectoryWebService. 4. Πληκτρολογήστε ΟΚ. Το Visual Web Developer δημιουργεί το νέο Web service και δημιουργεί ένα default Web Service με όνομα Service1. Το Web service αποτελείται από δύο αρχεία. Το Service1.asmx αρχείο είναι το αρχείο που μπορεί να χρησιμοποιηθεί για την κλήση μεθόδων ενός Web Service και «δείχνει» στον κώδικα για το Web service. Ο κώδικας βρίσκεται ουσιαστικά στο Service1.asmx.cs αρχείο στο φάκελο App_Code. 13
Το αρχείο αυτό περιέχει πρότυπο κώδικα για ένα Web service. 5. Κλείνουμε το αρχείο Service1.asmx που εμφανίζεται. Για την εκτέλεση του Web service: 1. Στο Solution Explorer, πατάμε στο Service1.asmx, και πληκτρολογήστε Ctrl+F5. Πραγματοποιείται η εκκίνηση του Web service και εμφανίζεται μια σελίδα σε ένα browser που δείχνει τις μεθόδους που παρέχει το συγκεκριμένο Web service. Χρήση του Web service μέσα από ένα Web site: 1. Πηγαίνουμε στην επιλογή μενού File, και επιλέξτε Web Site. 2. Στα Visual Studio installed templates, επιλέξτε ASP.NET Web Site. 3. Στο πεδίο Language επιλέξτε Visual C#. 4. Ονομάζουμε το Web Site PizzaDirectory. 5. Πατήστε ΟΚ. Για την κλήση των μεθόδων του Web service: Στο Solution Explorer πατάμε δεξί κλικ στο Default.aspx και επιλέξτε View Designer. Από την ομάδα Standard στο Toolbox (στα αριστερά του παραθύρου του Visual Web Developer), τραβάμε γραφικά όπως Image, DropDownList. Σε περίπτωση που δεν εμφανίζεται το Toolbox πηγαίνουμε στην επιλογή μενού View, και επιλέγουμε Toolbox ή πατήστε Ctrl + Alt + Χ. Τις ιδιότητες κάθε γραφικού στοιχείου μπορούμε να τις δούμε και να τις διαμορφώσουμε ως εξής. Πατάμε πάνω σε ένα συγκεκριμένο στοιχείο. Στο κάτω δεξί μέρος του παραθύρου του Visual Web Developer εμφανίζονται οι ιδιότητες του αντίστοιχου στοιχείου. Στο Source του Default.aspx περνάμε την εικόνα που θέλουμε να εμφανίζεται. 1. Στο Solution Explorer πατάμε δεξί κλικ στο Default.aspx και επιλέξτε View Designer. 14
2. Από την ομάδα Standard στο Toolbox (στα αριστερά του παραθύρου του Visual Web Developer), «έχουμε τραβήξει» τα γραφικά στοιχεία που αποικονίζονται και έχουμε θέσει ιδιότητές (properties). 3. Κάντε διπλό κλικ στο Dropdown List. 4. Παταμε Ctrl+F5 για την εκκίνηση της σελίδας. 15
ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΟΚΕΝΤΡΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Σύνδεση με το Web service : 1. Στο Solution Explorer κάντε δεξί κλικ στο Web Site menu, και επιλέξτε Add Web Reference. Θα εμφανιστεί το παρακάτω παράθυρο 16
ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΟΚΕΝΤΡΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 2. Στο πεδίο URL, εισάγετε το URL που αντιστοιχεί στο Web service, όπως αυτό εμφανίζεται στη σελίδα όπου παρουσιάζονται οι μέθοδοι του Web service (http://localhost) και πατήστε Go. Όταν το Visual Web Developer ανακαλύψει το Web service, η πληροφορία εμφανίζεται στο παράθυρο Add Web References. 3. Πληκτρολογήστε στο link κάποιας μεθόδου. Εμφανίζεται η δοκιμαστική σελίδα για τη μέθοδο. 4. Πατήστε Add Reference. Το Visual Web Developer δημιουργεί ένα φάκελο App_WebReferences και προσθέτει σε αυτό έναν φάκελο για το νέο Web reference. Εξ ορισμού στα Web references ανατίθεται ένα namespace που αντιστοιχεί στο όνομα του server από τον οποίο γίνονται διαθέσιμα (σε αυτήν την περίπτωση localhost). Στον φάκελο το Visual Web Developer προσθέτει ένα.wsdl αρχείο που αναφέρεται στο Web service. 17
ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΟΚΕΝΤΡΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 7. Λειτουργία του Web Site. 18
ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΟΚΕΝΤΡΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 5. Ο κώδικας Web Service: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="PizzaDirectory._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>our Pizza shops</title> </head> <body> <center> 19
ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΟΚΕΝΤΡΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ <form id="form1" runat="server"> <p> <asp:image ID="Image1" runat="server" ImageUrl="pizza.jpg" /> </p> <div> Choose the shop that suits you best: <asp:dropdownlist ID="DropDownList1" runat="server" onselectedindexchanged="dropdownlist1_selectedindexchanged" AutoPostBack="True"> </asp:dropdownlist> <br /> <br /> <asp:label ID="Label1" runat="server"></asp:label> </div> </form> </center> </body> </html> 20