Webszolgáltatások készítése.net alapokon -

Hasonló dokumentumok
WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Webshop készítése ASP.NET 3.5 ben I.

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Adatbázisok webalkalmazásokban

Access adatbázis elérése OLE DB-n keresztül

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

BME MOGI Gépészeti informatika 4.

Objektumorientált programozás C# nyelven

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Kalapácsvetés 2016 szöveges

Stateless Session Bean

Bánsághi Anna

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Objektumorientált programozás C# nyelven III.

Vizuális programozás gyakorlat

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

INFORMATIKAI ALAPISMERETEK

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Széchenyi István Egyetem

Programozás és adatbázis kezelés PHP ben

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

JavaServer Pages (JSP) (folytatás)

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

INFORMATIKAI ALAPISMERETEK

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

ASP-s alkalmazás készítés

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

11. Gyakorlat: Certificate Authority (CA), FTP site-ok

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Java és web programozás

Segédanyag: Java alkalmazások gyakorlat

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

KnowledgeTree dokumentumkezelő rendszer

INFORMATIKAI ALAPISMERETEK

Objektumorientált programozás C# nyelven

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Java és web programozás

BBS-INFO Kiadó

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

ANDROID ALKALMAZÁSFEJLESZTÉS

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatbázis-kezelés. Harmadik előadás

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

Informatika terméktervezőknek

C#---Access adatbáziskezelési gyakorlat

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Adatbázis-kezelés ODBC driverrel

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

OOP és UML Áttekintés

Az SQL*Plus használata

1. ábra Fájl feltöltése 2. ábra Megtekintés

Miről lesz szó? Setup Project készítése. Tulajdonságok. 1. Készítsünk egy setup project alkalmazást egy már elkészített, lefordított programhoz.

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Adatbázis Rendszerek II. 2. Gyakorló környezet

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Java Programozás 11. Ea: MVC modell

Készítette: Szabóné Nacsa Rozália

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

BME MOGI Gépészeti informatika 13.

Entity Framework alapú adatbáziselérés

I. fejezet Hello Világ! Programozás tankönyv. II. Fejezet. Helló Világ! avagy a Miért?-ek elkezdődnek

Tranzakciókezelés PL/SQL-ben

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Adatbázis. AMP! (Apache + MySql + PHP) XAMPP, LAMP, MAMP, WAMP et cetera

Entity Framework + LINQ oktatási segédlet

Telepítési Kézikönyv

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Segédanyag: Java alkalmazások gyakorlat

Elemi alkalmazások fejlesztése IV.

Kliens oldali SQL-API

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Java és web programozás

MVC. Model View Controller

Vizuális, eseményvezérelt programozás I.

Átírás:

Webszolgáltatások készítése.net alapokon - Egyszerűbb webszolgáltatások készítése Ha kérdése vagy észrevétele van csaba.biro.ekf@gmail.com A témakörhöz tartozó elődadás anyaga az alábbi helyről tölthető le: http://aries.ektf.hu/~ksanyi/internete/4.pdf Tartalomjegyzék ASP.NET Web Form létrehozása... 1 Very_Simple_Service... 4 Simple_Service... 5 Service.asmx... 8 MySQL telepítése és konfigurálása... 8 MySQL Workbench... 14 Kliens1 (Console Application)... 22 Szolgáltatások publikálása... 24 Kliens2 (ASP.NET-SOAP)... 27 ASP.NET Web Form létrehozása File New Project ASP.NET Web Forms Application (.NET Framework 3.5) Add New Item... 1

Web Service (ASMX) Adjuk hozzá a projekthez a következő három állományt! 1. Very_Simple_Service.asmx 2. Simple_Service.asmx 3. Service.asmx Alapértelmezés szerint a Default.aspx a kezdőoldal és onnan tudunk elnavigálni az egyes szolgáltatásokhoz. Igény merülhet fel fejlesztéskor, hogy az adott szolgáltatást, amelyen dolgozunk közvetlen szeretnénk futtatni, ekkor érdemes beállítani, hogy ez legyen a kezdőoldal. Set As a Start Page 2

Default.aspx fájl bővítése (Minimal Design) HTML és ASP.NET vezérlők vegyesen <div> </div> <table> <tr> <td align="center">web Services</td> </tr> <tr> <td align="center"> <asp:hyperlink ID="VSS" runat="server" NavigateUrl="~/Very_Simple_Service.asmx"> Very_Simple_Service</asp:HyperLink> </td> </tr> <tr> <td align="center"> <asp:hyperlink ID="SS" runat="server" NavigateUrl="~/Simple_Service.asmx"> Simple_Service</asp:HyperLink> </td> </tr> <tr> <td align="center"> <asp:hyperlink ID="S" runat="server" NavigateUrl="~/Service.asmx"> Service</asp:HyperLink> </td> </tr> </table> Futtassuk az elkészített alkalmazást valamely számunkra szimpatikus böngészőben 3

Very_Simple_Service Készítsük el az első webszolgáltatásunkat! Very_Simple_Service.asmx-hez két metódust készítünk (Fahrenheit és Celsius hőmérsékleti skálák közötti konverziók elvégzéséhez). 1. public double ConvertCelsiusToFahrenheit(string Celsius) 2. public double ConvertFahrenheitToCelsius(string Fahrenheit) Elmélet: [ C] = ([ F] - 32) 5/9 [ F] = [ C] 9/5 + 32 public class Very_Simple_Service : System.Web.Services.WebService [WebMethod] public double ConvertCelsiusToFahrenheit(string Celsius) double num; if (!double.tryparse(celsius, out num)) throw new InvalidOperationException("Value is not a number."); return ((9.0 / 5.0) * num) + 32; [WebMethod] public double ConvertFahrenheitToCelsius(string Fahrenheit) double num; if (!double.tryparse(fahrenheit, out num)) throw new InvalidOperationException("Value is not a number."); return (5.0 / 9.0) * (num - 32); Indítsuk el és próbáljuk ki az elkészített szolgáltatást! 4

Simple_Service A Simple_Service az előzőzőhöz képest annyival tud többet, hogy itt a kérésekre küldött értékeket kétfajta adatforrásból (string-eket tartalmazó mátrix, xml fájl) kiolvasva szolgáltatja. Planck egységekről bővebben: http://hu.wikipedia.org/wiki/planck-egys%c3%a9gek Szolgáltatások 1. public double UnitValue(string dimension) 2. public string UnitName(string dimension) 3. public string UnitValueFromXML(string dimension) Simple_Service.asmx bővítése using System.Xml; using System.Data; public class Simple_Service : System.Web.Services.WebService 5

string[,] PlanckUnits = "L", "Planck length", "1,616199E-35", "M", "Planck mass", "2,17651E-8", "T", "Planck time", "5,39106E-44", "Q", "Planck charge", "1,875545956E-18", "Θ", "Planck temperature", "1,416833E+32" ; [WebMethod] public double UnitValue(string dimension) double num; for (int i = 0; i < PlanckUnits.GetLength(0); i++) if (String.Compare(dimension, PlanckUnits[i, 0], true) == 0) if (!double.tryparse(planckunits[i, 2], out num)) throw new InvalidOperationException("Value is not a number."); return num; return 0; [WebMethod] public string UnitName(string dimension) // It takes the symbol as parameter and // returns name of the stock for (int i = 0; i < PlanckUnits.GetLength(0); i++) if (String.Compare(dimension, PlanckUnits[i, 0], true) == 0) return PlanckUnits[i, 1]; return "Unit Not Found"; [WebMethod] public string UnitValueFromXML(string dimension) XmlReader xmlfile; xmlfile = XmlReader.Create("c:/temp/PlanckUnits.xml", new XmlReaderSettings()); DataSet ds = new DataSet(); DataView dv; ds.readxml(xmlfile); dv = new DataView(ds.Tables[0]); dv.sort = "Dimension"; int index = dv.find(dimension); if (index == -1) return "Unit Not Found"; else return dv[index]["value"].tostring(); PlanckUnits.xml (helye: c:/temp/) <?xml version="1.0" encoding="utf-8"?> <Units> <Unit> <Dimension>L</Dimension> 6

<Name>Planck length</name> <Value>1,616199E-35</Value> </Unit> <Unit> <Dimension>M</Dimension> <Name>Planck mass</name> <Value>2,17651E-8</Value> </Unit> <Unit> <Dimension>T</Dimension> <Name>Planck time</name> <Value>5,39106E-44</Value> </Unit> <Unit> <Dimension>Q</Dimension> <Name>Planck charge</name> <Value>1,875545956E-18</Value> </Unit> <Unit> <Dimension>Θ</Dimension> <Name>Planck temperature</name> <Value>1,416833E+32</Value> </Unit> </Units> Indítsuk el és próbáljuk ki az elkészített szolgáltatást! 7

Service.asmx Ebben a szolgásban az adatokat MySQL adatbázisban tároljuk, és onnan olvassuk ki. Mielőtt a szolgáltatást elkészítenénk, tegyünk egy kis kitérőt. (Természetesen, akinek a MySQL Server már a gépén az a telepítés és konfigurálás részt átugorhatja..) MySQL telepítése és konfigurálása Letölthető: http://dev.mysql.com/downloads/installer/ Telepítés lépései: 8

9

Felhasználók és jogosultságok beállítása: Nem kötelező új felhasználót hozzáadni, elég nekünk a root is (most)! 10

11

12

13

Ha minden rendben, akkor az értesítési területen máris megtalálható a kis Dolphin MySQL Workbench Az adatok tárolásához létre kell hozunk egy sémát és abban egy táblát! (természetesen használhatjuk az alapértelmezett sémákat is, de a egy tábla mindenképp kell ott is..) SCHEMA létrehozása CREATE SCHEMA planck; 14

Tábla létrehozás a planck sémában CREATE TABLE planck_units( unit_id INT NOT NULL AUTO_INCREMENT, planck_dimension VARCHAR(1) NOT NULL, planck_name VARCHAR(40) NOT NULL, planck_value DOUBLE, PRIMARY KEY( unit_id )); Feltöltés adatokkal INSERT INTO planck_units (unit_id, planck_dimension, planck_name, planck_value) VALUES (1, 'L', 'Planck length', 1.616199E-35); INSERT INTO planck_units (unit_id, planck_dimension, planck_name, planck_value) VALUES (2, 'M', 'Planck mass', 2.17651E-8); INSERT INTO planck_units (unit_id, planck_dimension, planck_name, planck_value) VALUES (3, 'T', 'Planck time', 5.39106E-44); INSERT INTO planck_units (unit_id, planck_dimension, planck_name, planck_value) VALUES (4, 'Q', 'Planck charge', 1.875545956E-18); INSERT INTO planck_units (unit_id, planck_dimension, planck_name, planck_value) 15

VALUES (5, 'Θ', 'Planck temperature', 1.416833E+32); Execute Query Ellenőrizzük. Ha ezek megvannak, akkor vissza az eredeti projektünkhöz (Service.asmx) Add reference: (remélhetőleg már elérhetőek ) MySql.Data MySql.Web 16

Névterek bővítése using MySql; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; Adatbázis kapcsolat kialakítása (Server Explorer Data Connections) Lehet root vagy akit még hozzáadtunk pl. adminisztrátorként. 17

ConnectionString kinyerése 18

Az innen kinyert string-et ki kell egészítenünk a felhasználóhoz tartozó jelszóval. Éles szolgáltatások esetében majd egy kicsivel jobban oda kell figyelni az adatok védelmére.. De a Planck állandók közkincsnek számítanak Connection String private string connstring = "server = localhost; user id = root; password=root; database = planck"; Három szolgáltatást készítünk 1. public DataTable DataFromMySQL() 2. public DataTable DataFromMySQL2(string dimension) 3. public string DataFromMySQL3(string dimension) Kérésre az összes adatot visszaküldi, amit a planck_unit táblában tárolunk. (DataTable) public DataTable DataFromMySQL() MySqlConnection cnmysql = new MySqlConnection(connString); //create your mysql command object MySqlCommand cmdmysql = cnmysql.createcommand(); //create your mysql reeader object MySqlDataReader reader; //set the command text (query) of the //mysql command object cmdmysql.commandtext = "select * from planck_units"; //open the mysql connection cnmysql.open(); reader = cmdmysql.executereader(); DataTable dt = new DataTable(); dt.load(reader); cnmysql.close(); return dt; 19

Eredmény A kérésben megadott feltételnek megfelelő rekord planc_value mezőjéhez tartozó adatot küldi vissza (DataTable) [WebMethod] public DataTable DataFromMySQL2(string dimension) MySqlConnection cnmysql = new MySqlConnection(connString); MySqlCommand cmdmysql = cnmysql.createcommand(); MySqlDataReader reader; cmdmysql.commandtext = "select planck_value from planck_units where planck_dimension = " + "'" + dimension + "'"; cnmysql.open(); reader = cmdmysql.executereader(); DataTable dt = new DataTable(); dt.load(reader); cnmysql.close(); return dt; Eredmény 20

A kérésben megadott feltételnek megfelelő rekord planc_value mezőjének értékét küldi vissza (String). [WebMethod] public string DataFromMySQL3(string dimension) MySqlConnection cnmysql = null; try cnmysql = new MySqlConnection(connString); string sel = "select planck_value from planck_units where planck_dimension = " + "'" + dimension + "'"; MySqlCommand cmd = new MySqlCommand(sel, cnmysql); MySqlDataReader reader; cnmysql.open(); reader = cmd.executereader(); while (reader.read()) double num = Convert.ToDouble(reader.GetValue(0)); string s = Convert.ToString(num); return s; cnmysql.close(); return "Unit Not Found"; catch (MySqlException ex) return "Database Error:" + ex.tostring(); finally if (cnmysql!= null) cnmysql.close(); Eredmény (kulturáltabban kezelhető) 21

URL-eket jegyezzük meg.. Kliens alkalmazás elkészítésekor még szükségünk lesz rá.. http://localhost:28542/ http://localhost:28542/service.asmx?op=datafrommysql3 Kliens1 (Console Application) File- New Console Application Add Service Reference 22

Add Web Reference Na itt kell majd a mentett URL (Lehet a http://localhost:xxxxx is, de az előbb elkészített szolgáltatások bármelyike is.. ) Természetesen a klienst azért igazítani kell hozzá ) Itt a Service.asmx-hez tartozó URL. 23

Kliens kódja Ez fontos!!! using WS_Simple_Client.localhost; namespace WS_Simple_Client class Program static void Main(string[] args) Console.Write("Planck dimension: "); string s = Console.ReadLine(); Service WebService = new Service(); Console.WriteLine("Result: " + WebService.DataFromMySQL3(s)); Console.Write("Press enter to continue..."); Console.ReadKey(); Futtatás (Természetesen a szolgáltatásnak is futnia kell!!) Szolgáltatások publikálása Vezérlőpult Windows Szolgáltatások IIS-kezelő konzol szükséges csak.. 24

ASP.NET alapú szolgáltatások telepítése IIS kezelőjének indítása Keresés inetmgr Alkalmazás hozzáadása 25

Ha nem másoltuk a projektünket a c:\inetpub\wwwroot jegyzékbe akkor tegyük meg és utána folytassuk a tallózást Alias megadása Próbáljuk ki!!! http://localhost/services/ Természetesen a kliensek esetében (ha a szolgáltatást már innen szeretnénk elérni) módosítanunk kell az URL-t. 26

Kliens2 (ASP.NET-SOAP) Ebben a részben egy webes klienst készítünk a Very_Simple_Service szolgáltatásunkhoz. File New ASP.NET Web Forms Application Add Service Reference (Namespace: ServiceReference1) Persze bármi más is adható Default.aspx felülete (Minimal Design) 27

Default.aspx <body> <form id="form1" runat="server"> <div> Converter<br /> <br /> Value: <asp:textbox ID="inputTextB" runat="server"></asp:textbox> <br /> <br /> <asp:dropdownlist ID="scaleDropDownL" runat="server" Height="20px" Width="143px"> <asp:listitem Value="C">Celsius</asp:ListItem> <asp:listitem Value="F">Fahrenheit</asp:ListItem> </asp:dropdownlist> <br /> <br /> <asp:button ID="convertBtn" runat="server" OnClick="convertBtn_Click" Text="Convert" /> </div> <p> <asp:label ID="labelResult" runat="server"></asp:label> </p> </form> </body> Kommunikáció: Kérések és válaszok SAOP XML üzeneteken keresztül a proxy szerver és kliens között. SOAP XML kapcsolat kialakítása ServiceReference1.Very_Simple_ServiceSoapClient client = new ServiceReference1.Very_Simple_ServiceSoapClient(); Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; 28

using System.Web.UI; using System.Web.UI.WebControls; namespace WS_Simple_Client_ASPNET public partial class _Default : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) private string Convert(string value, int index) ServiceReference1.Very_Simple_ServiceSoapClient client = new ServiceReference1.Very_Simple_ServiceSoapClient(); string result = null; int num; if (!int.tryparse(value, out num)) return "Must be a valid 32-bit integer!"; try if (scaledropdownl.selectedindex == 0) result = client.convertcelsiustofahrenheit(inputtextb.text).tostring(); else result = client.convertfahrenheittocelsius(inputtextb.text).tostring(); catch (Exception e) labelresult.forecolor = System.Drawing.Color.Red; result = e.tostring(); return result; protected void convertbtn_click(object sender, EventArgs e) labelresult.forecolor = System.Drawing.Color.Black; labelresult.text = Convert(inputTextB.Text, scaledropdownl.selectedindex); Indítsuk el és próbáljuk ki! 29

Megjegyzés: A Klienst is publikálhatjuk az IIS-ben! Webes kliens publikálása ugyanúgy történik, mint a szolgáltatások esetében. 30