Webszolgáltatások
2007.09.10.
Webszolgáltatások
Webszolgáltatások felhasználása
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendı anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelezı irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges.
Katona Krisztina BMF NIK 2007
[email protected]
2
Tartalom
A webszolgáltatás fogalma Szolgáltatásközpontú rendszerek Szabványok és protokollok Webszolgáltatás felhasználása XML áttekintés
Katona Krisztina BMF NIK 2007
[email protected]
3
1
Webszolgáltatások
2007.09.10.
Mi a webszolgáltatás?
Szoftverkomponens, amely hálózaton keresztül szolgáltatásokat nyújt Általában nagyobb rendszerek adott feladatot ellátó része A felhasználó (legtöbbször egy másik alkalmazás) számára fekete dobozként viselkedik Jól meghatározott interfészeken keresztül érhetı el Katona Krisztina BMF NIK 2007
[email protected]
4
A webszolgáltatások elınyei
Szabványos internet protokollokon keresztül érhetı el XML-en alapuló, nyílt szabványokra épül Rendszertıl, nyelvtıl és megvalósítástól független Leírható, közzétehetı, felkutatható
Katona Krisztina BMF NIK 2007
[email protected]
5
Szolgáltatásközpontú rendszerek
A webszolgáltatások fejlıdésének korai szakaszában létrejött minta Serivce-oriented Architecture, SOA
A szabványok és protokollok ezen minta alapján jöttek létre Szolgáltatásjegyzék Keres
Közzétesz Szolgáltat Szolgáltató
Igénybe vesz
Katona Krisztina BMF NIK 2007
[email protected]
Szolgáltatást igénybe vevı
6
2
Webszolgáltatások
2007.09.10.
Szabványok és protokollok Felderítés UDDI, DISCO
A szolgáltatását a készítı közzéteheti egy jegyzékben A jegyzékben a szolgáltatást igénylı kutathat
UDDI: Universal Description, Discovery and Integration
Webszolgáltatások jegyzéke Több szempont szerint kereshetı (szolgáltatás, cégnév, telephely) Lehet nyilvános, vagy cégen belüli
DISCO: a discovery (felfedezés) szóból
Leírás WSDL
Üzenet SOAP
Átvitel HTTP, SMTP, …
A Microsoft megoldása szolgáltatások hirdetésére Katona Krisztina BMF NIK 2007
[email protected]
7
Szabványok és protokollok Felderítés UDDI, DISCO
Ha az igénylı megtalálta a megfelelı szolgáltatást, tudnia kell, hogy
hol, és milyen néven érhetı el a szolgáltatás, milyen bemeneti paramétereket vár, mit ad vissza.
WSDL: Web Services Description Language
A kérés és a válasz leírását adja meg Katona Krisztina BMF NIK 2007
[email protected]
Leírás WSDL
Üzenet SOAP
Átvitel HTTP, SMTP, …
8
Szabványok és protokollok Felderítés UDDI, DISCO
Az üzenetet el kell küldeni a szolgáltatónak, Leírás ami az adatokat feldolgozva válaszWSDL üzenetet küld SOAP: Simple Object Access Protocol
Üzenetek küldésére használt protokoll
Üzenet SOAP
Átvitel
Az eddigi protokollok és szabványok az HTTP, SMTP, … XML (Extensible Markup Language) nyelven alapulnak Katona Krisztina BMF NIK 2007
[email protected]
9
3
Webszolgáltatások
2007.09.10.
Szabványok és protokollok Felderítés UDDI, DISCO
Az üzeneteket át kell vinni a hálózaton keresztül a szolgáltató és a szolgáltatást igénybevevı között Leírás WSDL
A SOAP független az átvitel típusától A legtipikusabb a HTTP (Hypertext Transfer Protocol) Üzenet SOAP Ha a kérések és a válaszok összhangja nem fontos, akkor az SMTP (Simple Mail Transfer Protocol) is kiváló eszköz a SOAP üzenetek továbbítására
Átvitel HTTP, SMTP, …
Katona Krisztina BMF NIK 2007
[email protected]
10
Webszolgáltatások megvalósítása .NET-ben Ügyfélalkalmazás
Logikai kapcsolat
Webszolgáltatás
Proxy osztály
IIS/ASP.NET
SOAP
SOAP
HTTP
HTTP
TCP/IP
TCP/IP Fizikai kapcsolat
Katona Krisztina BMF NIK 2007
[email protected]
11
Webszolgáltatás felhasználása
Egy webszolgáltatás felhasználója bármilyen típusú program lehet (konzolalkalmazás, Windows alkalmazás, webalkalmazás…) A felhasználó nem kell hogy ismerje a szolgáltatás megvalósításának részleteit A kérés és a válasz protokollját, valamit az üzenet struktúráját a WSDL leíró nyelven megadott dokumentum tartalmazza Az alkalmazásfejlesztı környezetek általában képesek létrehozni egy un. proxy osztályt (ügyfélcsonkot) Katona Krisztina BMF NIK 2007
[email protected]
12
4
Webszolgáltatások
2007.09.10.
A proxy osztály (ügyfélcsonk)
Elkülöníti a SOAP és a hálózati protokollokkal kapcsolatos rétegeket az alkalmazástól Egy hagyományos osztály, amely visszatükrözi a webszolgáltatás mőködését Mindenegyes proxy osztálybeli metódus bemeneti paraméterei és visszatérési értéke megegyezik a vele azonos webszolgáltatásbeliekkel A fejlesztı a szolgáltatás meghívását és a válasz fogadását a proxy osztály metódusán keresztül végzi, nem szükséges ismernie az egyéb szabványokat és protokollokat Katona Krisztina BMF NIK 2007
[email protected]
13
Webszolgáltatás felhasználása .NET-ben
Proxy osztályt legegyszerőbben úgy kapunk, ha a szolgáltatás elérhetıségét web referenciaként a projekthez adjuk A wsdl.exe parancssori eszközzel tudunk sajátos igényeknek megfelelı proxy osztályt létrehozni
Adjuk meg az elérhetıséget Kattintsunk a Go gombra Adjuk meg a referencia nevét Kattintsunk az Add Reference gombra
A Reference.cs fájlban található a proxy osztály, amely a projektnév.referencianév névtérben helyezkedik el és neve a webszolgáltatás neve Katona Krisztina BMF NIK 2007
[email protected]
14
Webszolgáltatás felhasználása .NET-ben A szolgáltatás neve
Meghívható metódusok
A szolgáltatás címét a böngészıbe beírva, a meghívható metódusok megjelennek, azokat kipróbálhatjuk. Katona Krisztina BMF NIK 2007
[email protected]
15
5
Webszolgáltatások
2007.09.10.
Feladat Készítsünk alkalmazást, amely megjeleníti az aktuális idıjárást egy megadott városban. Az adatokat egy webszolgáltatótól kérjük le. Megoldási ötletek:
Keressünk webszolgáltatás-keresıt Keressünk rá idıjárás-szolgáltatókra Ellenırizzük, hogy létezik-e a WSDL leírás Adjuk meg a web referenciát A proxy osztály segítségével hívjuk meg a szolgáltatást Katona Krisztina BMF NIK 2007
[email protected]
16
Megoldás – egy lehetséges eset
A kiválasztott szolgáltatás címe: http://www.webservicex.com/globalweather.asmx
A Reference.cs fájlt megnézve, vagy az IntelliSense-re hagyatkozva
Példányosítjuk a proxy osztályt, Meghívjuk a metódusát (miáltal meghívódik a Proxy osztály távoli metódus)
WeatherService.GlobalWeather weather = new WeatherService.GlobalWeather(); string response = weather.GetWeather(textBoxCity.Text, textBoxCountry.Text); MessageBox.Show(response); A szolgáltatás meghívása Katona Krisztina BMF NIK 2007
[email protected]
17
XML - áttekintés
Az eredmény XML formátumban van Az anyagnak nem célja az XML ismertetése, az itt következı rész, csak egy kis áttekintés, hiszen
a webszolgáltatások alapja az XML sokszor a válasz formátuma is ez Katona Krisztina BMF NIK 2007
[email protected]
18
6
Webszolgáltatások
2007.09.10.
XML - áttekintés
XML = Extensible Markup Language Olyan információ és szolgáltatás kódolására alkalmas struktúra és tartalom, amely mind ember, mind számítógép számára értelmezhetı.
XML dokumentum Az XML dokumentum egy bevezetıvel indul (legtöbbször a verziószámot és a kódolás típusát tartalmazza), ezt követi a gyökérelem, és ezt a többi elem egymásba ágyazva. Az elemek nyitó-, zárótagbıl és a köztük elhelyezkedı tartalomból állnak.
XML séma Az XML dokumentumok struktúrájára és a tartalom megkötéseinek leírására szolgáló nyelv. Az ilyen fájlok kiterjesztése xsd. Katona Krisztina BMF NIK 2007
[email protected]
19
Feladat Az elıbb bemutatott webalkalmazás megadja, hogy egy adott országban mely városokról szolgáltat adatokat. Használjuk ezt ki a városok megadásánál.
Katona Krisztina BMF NIK 2007
[email protected]
20
Megoldás – egy lehetséges eset
Az elızı módon meghívjuk a megfelelı metódust, ami egy sztringet ad vissza Az sztringrıl tudjuk, hogy XML formátumban van Az XML dokumentumból lekérjük a „City” nevő tageket. Egy tömböt kapunk. A tömbbıl kiíratjuk a városokat. Katona Krisztina BMF NIK 2007
[email protected]
21
7
Webszolgáltatások
2007.09.10.
Megoldás – egy lehetséges eset WeatherService.GlobalWeather weather = new WeatherService.GlobalWeather(); string response = weather.GetCitiesByCountry(textBoxCountry.Text); az eredményt bájttömbbé konvertáljuk, hogy
byte[] responseBytes = Encoding.UTF32.GetBytes(response); Streambe tehessük System.IO.MemoryStream ms = new System.IO.MemoryStream(responseBytes); System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(ms); System.Xml.XmlNodeList elemList = doc.GetElementsByTagName("City"); foreach (System.Xml.XmlNode node in elemList) { comboBoxCities.Items.Add(node.InnerText); } comboBoxCities.Text = comboBoxCities.Items[0].ToString();
a MemoryStreambıl tudjuk kiolvasni az XML-adatokat az XML dokumentum reprezentációja a memóriában a "City" nevő tagek kinyerése a „City” nevő tagek tömbjén végigmenve feltöltjük a comboboxot a városok neveivel
Katona Krisztina BMF NIK 2007
[email protected]
22
Feladat Tegyük felhasználóbaráttá a programot Kezeljük a nemvárt eseteket
Katona Krisztina BMF NIK 2007
[email protected]
23
Házi feladat
Készítsünk egy dll-t, mely vicceket tárol, és kérésre ad egyet közülük.
A következı órai webszolgáltatásnak ez lesz a logikai alapja.
Katona Krisztina BMF NIK 2007
[email protected]
24
8
Webszolgáltatások
2007.09.10.
Webszolgáltatások
Webszolgáltatások készítése
Tartalom
ASP.NET webszolgáltatás létrehozása Visual Studio 2005-tel Egyszerő tesztelési lehetıségek Kivételkezelés Telepítési módok Közzététel
Katona Krisztina BMF NIK 2007
[email protected]
26
Webszolgáltatások megvalósítása .NET-ben Ügyfélalkalmazás
Logikai kapcsolat
Webszolgáltatás
Proxy osztály
IIS/ASP.NET
SOAP
SOAP
HTTP
HTTP
TCP/IP
TCP/IP Fizikai kapcsolat
Katona Krisztina BMF NIK 2007
[email protected]
27
9
Webszolgáltatások
2007.09.10.
Feladat Készítsünk webszolgáltatást, amely kérésre ad egy viccet. Használjuk a házi feladatként elkészített dll-t.
Katona Krisztina BMF NIK 2007
[email protected]
28
A vicc-osztó feladat logikája – egy lehetséges megoldás
A Jokes.dll biztosítja a vicceket. Mely kategóriánként egy-egy szövegfájlból olvassa ki a vicceket. A viccek között egy-egy üres sor kell hogy legyen. A JokeSelection osztály példányosításkor kapja meg a szövegfájlok elérési útját. A JokeSelection osztály szolgáltatandó metódusai:
A metódusok által dobható kivételek:
GetAJoke: adott kategóriából az adott számú viccet adja vissza szövegként NumOfJokes: adott kategóriában található viccek számát adja vissza int típusként NoJokeException EmptyFileException
A Category felsorolás tartalmazza a viccek kategóriáit Katona Krisztina BMF NIK 2007
[email protected]
29
A Jokes.dll tartalma
Katona Krisztina BMF NIK 2007
[email protected]
30
10
Webszolgáltatások
2007.09.10.
ASP.NET webszolgáltatás létrehozása Visual Studio 2005-tel
New Web Site
ASP.NET Web Service
A létrejött fájlok
Ha helyét a fájlrendszerben adjuk meg, akkor teszteléskor a VS által generált IIS szerveren fut a szolgáltatás
asmx fájl: ez reprezentálja a webszolgáltatást, amely az URI-jével elérhetı mögöttes kód: ez adja meg a program mőködését
A fájlok és az osztály nevét célszerő beszédesre megváltoztatni Katona Krisztina BMF NIK 2007
[email protected]
31
A fájlok tartalma
asmx fájl: <%@ WebService Language="C#" CodeBehind="~/App_Code/JokeProviderService.cs" Class="JokeProviderService" %>
a lap feldolgozásához ad információt mindig a <%@ WebService … %> között van
mögöttes kód: [WebService(Namespace = "http://www.nik.hu/HP/")] public class JokeProviderService : System.Web.Services.WebService { [WebMethod(Description="Adott kategóriában, az adott sorszámú viccet adja.")] public string GetAJoke(Category category, int number) {
A metódus elıtti WebMethod attribútum jelzi hogy elérhetı a webszolgáltásban Az osztályban más metódusok is lehetnek Katona Krisztina BMF NIK 2007
[email protected]
32
Kiegészítések a szolgáltató osztályhoz [WebService(Namespace = "http://www.nik.hu/HP/")] public class JokeProviderService : System.Web.Services.WebService { [WebMethod(Description="Adott kategóriában, az adott sorszámú viccet adja.")] public string GetAJoke(Category category, int number) {
A WebService attribútumnál a szolgáltatás fontos beállításai adhatók meg:
névtér: figyelem!, nem azonos a .NET névtérrel Az XML névtér a dokumentum elemeinek egyedi azonosítását szolgálja, általában egy URL Ezért írjuk át a saját „cégünk” webcímére név leírás
A webszolgáltatás osztályának nem feltétlen kell a WebService osztályból származnia, de így kihasználhatjuk az ASP.NET-adta elınyöket, a fejlesztés egyszerőbb; a származtatás ajánlott Katona Krisztina BMF NIK 2007
[email protected]
33
11
Webszolgáltatások
2007.09.10.
Egyszerő tesztelési lehetıségek
A webszolgáltatás futtatásakor (ha a projektet a fájlrendszerben hoztuk létre) a VS generál egy IIS szervert Ilyenkor egy böngészı nyílik, amelyben a webszolgáltatás metódusai elérhetık Teszteléshez megírhatjuk a webszolgáltatást felhasználó alkalmazást, ekkor:
a portszámot állítsuk fixre a szolgáltatás projektjének tulajdonságai között így ha már fut a virtuális szerver, akkor a webszolgáltatás felhasználásánál tanultak alapján a másik projektben (akár solutionben) használhatjuk a webszolgáltatásunkat Katona Krisztina BMF NIK 2007
[email protected]
34
Kivételkezelés
SOAP Fault:
SOAP kliens esetén az ASP.NET ilyen hibát küld, melynek mezıi: faultcode: kötelezı, karakterlánc általában a hibakódok egyikével kezdıdik:
Server: a hiba a szerverben volt, az üzenet újbóli elküldése sikerre vezethet Client: a hiba az üzenet tartalmában vagy formátumában van, nem érdemes újra próbálkozni
faultstring: olvasható formában írja le a hiba okát faultactor: tájékoztat, hogy hol következett be a hiba az üzenet útja során Katona Krisztina BMF NIK 2007
[email protected]
35
Kivételkezelés
Ha a webszolgáltatás minden kivételt elkap, és helyettük SoapException-t dob, akkor az ASP.NET ennek alapján tölti ki a SOAP Fault mezıit
Code tulajdonság -> faultcode Message tulajdonság -> faultstring Actor tulajdonság -> faultactor
Így saját hibakódokat küldve elérhetjük, hogy a kliensalkalmazás megfelelı információhoz jusson Figyelem! A WSDL leírás nem tartalmaz információt a kivételekrıl, tehát a saját kivételeket külön kell dokumentálni Katona Krisztina BMF NIK 2007
[email protected]
36
12
Webszolgáltatások
2007.09.10.
Kivételkezelés – szolgáltatói oldal try { JokeSelection js = new JokeSelection(Server.MapPath("App_Data") + "//"); return js.NumOfJokes(category); } catch (Exception ex)
A vicceket tartalmazó fájlok az App_Data mappában vannak.
Minden kivételt elkapunk.
{
System.Xml.XmlQualifiedName code; if (ex is Jokes.NoJokeException) { code = new System.Xml.XmlQualifiedName("Client.NoJoke"); } else if (ex is Jokes.EmptyFileException) { code = new System.Xml.XmlQualifiedName("Server.EmptyFile"); } else { code = SoapException.ServerFaultCode; } throw new SoapException(ex.Message, code); }
Katona Krisztina BMF NIK 2007
[email protected]
A SoapException.Code tulajdonság nem szting hanem XmlQualifiedName példány. A Jokes.dll-ben két kivételt definiáltunk: NoJokeException és EmptyFileException. Ezeket SoapException-né alakítjuk. A többi kivételt alapértelmezett szerver hibaként kezeljük. A SoapExceptiont az üzenettel és a kóddal példányosítva dobjuk. 37
Kivételkezelés – felhasználói oldal try { JokeProviderService.JokeProviderService js = new JokeProviderService.JokeProviderService(); … } Elkapjuk a SoapException catch (System.Web.Services.Protocols.SoapException ex) kivételeket. { switch (ex.Code.ToString()) { A kivétel kódja nincs benne case "Client.NoJoke": a WSDL-ben, máshonnan ismerjük. MessageBox.Show(ex.Message); break; … default: MessageBox.Show(ex.Code + "\n\n " + ex.Message); break; } }
Katona Krisztina BMF NIK 2007
[email protected]
38
Telepítési módok
Másolás (Copy Web Site)
Publikálás (Publish Web Site)
A fájlokat és mappákat egy-az-egyben felmásolja a célszerverre Szinkronizációs eszközt is tartalmaz Website/Copy Web Site… menüpont Elıfordítja a webszolgáltatást és a megadott helyre másolja az eredményt Build/Publish Web Site menüpont
Telepítı alkalmazás készítése
A .NET alkalmazások telepítése, Windows Installer (MSI) telepítıkészlet létrehozása részben leírtak szerint Csak a Setup and Deployment típusok közül a Web Setup Project sablont kell választani Katona Krisztina BMF NIK 2007
[email protected]
39
13
Webszolgáltatások
2007.09.10.
Közzététel
UDDI (Universal Description, Discovery and Integration)
A szolgáltatás megadásán kívül a szolgáltatóról is tartalmaz adatokat (név, elérhetıségek …) A szolgáltatás üzleti besorolása is megadható
DISCO (discovery)
A Microsoft fejlesztése Tartalmazhat:
Hivatkozást webszolgáltatások leírására Hivatkozást más DISCO fájlra Katona Krisztina BMF NIK 2007
[email protected]
40
Közzététel – DISCO
A szolgáltatások leírása egy .disco kiterjesztéső XML fájlban van A fájlban lévı leírások hivatkozás hozzáadásával (References/Add Web Reference) és a disco fájl megadásával érhetık el
Katona Krisztina BMF NIK 2007
[email protected]
41
Feladat
Az elkészített vicc-osztó webszolgáltatásban oldjuk meg a kivételek kezelését
Telepítsük a szolgáltatást
Tegyük közzé
A közzétett szolgáltatások közül egyet használjuk, és nevessünk a viccein ☺ Katona Krisztina BMF NIK 2007
[email protected]
42
14
Webszolgáltatások
2007.09.10.
Ajánlott irodalom
XML összefoglaló
Webszolgáltatások bevezetı
A. Freeman, A. Jones: Microsoft® .NET XML Web Services Step by Step
Telepítés
John Sharp: Visual C# 2005 lépésrıl lépésre
Webszolgáltatások angolul
Steve Graham et al: Java alapú webszolgáltatások
http://msdn2.microsoft.com/en-us/library/7hd4c0x3(VS.80).aspx
XML adatkezelés
http://msdn2.microsoft.com/en-us/library/hf9hbf87(VS.80).aspx http://forums.devx.com/archive/index.php/t-16677.html Katona Krisztina BMF NIK 2007
[email protected]
43
15