Webszolgáltatások. A webszolgáltatás fogalma Szolgáltatásközpontú rendszerek Szabványok és protokollok Webszolgáltatás felhasználása XML áttekintés



Hasonló dokumentumok
Webszolgáltatások felhasználása

Webszolgáltatások. Hallgatói tájékoztató. Tartalom. Webszolgáltatások

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

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Objektumorientált programozás C# nyelven

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

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

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

SOAP komponensek Delphiben

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

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

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

.NET alkalmazások telepítése

1. fejezet Bevezetés a web programozásába (Balássy György munkája) Az internet működése... 11

Telepítési Kézikönyv

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

Webszolgáltatások (WS)

SOA modell: Ez az interfész definiálja az elérhető adatokat, és megadja, hogy hogyan lehet azokhoz hozzáférni.

Bánsághi Anna

BME MOGI Gépészeti informatika 4.

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

Segédanyag: Java alkalmazások gyakorlat

Digitális aláíró program telepítése az ERA rendszeren

Bevezető. Servlet alapgondolatok

Microsoft SQL Server telepítése

Már megismert fogalmak áttekintése

Interfészek. PPT 2007/2008 tavasz.

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

OOP és UML Áttekintés

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Entity Framework alapú adatbáziselérés

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Digitális aláíró program telepítése az ERA rendszeren

Java és web programozás

Programozási nyelvek Java

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

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Könyvtári címkéző munkahely

Objektumorientált Programozás VI.

Az Outlook levelező program beállítása tanúsítványok használatához

Útmutató az OKM 2007 FIT-jelentés telepítéséhez

Szolgáltatásorientált rendszerintegráció. SOA-alapú rendszerintegráció. Web-szolgáltatások: SOAP, WSDL

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Rendszerkövetelmények

Webes alkalmazások fejlesztése

Telepítés, újratelepítés több számítógépre, hálózatos telepítés Kulcs-Bér program

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

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

TERC V.I.P. hardverkulcs regisztráció

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

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

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.

Stateless Session Bean

Oralce kliens installálása Windows Server 2003-ra

Programozási technológia

RIA Rich Internet Application

Debreceni Egyetem Informatikai Kar. Szolgáltatás-orientált programozás az Oracle-ben

Tanúsítványkérelem készítése, tanúsítvány telepítése Microsoft Internet Information szerveren

Osztott alkalmazások fejlesztési technológiái Áttekintés

M-Files Dokumentumkezelő telepítése

JAVA webes alkalmazások

Web programoz as

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

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

Vectory telepítési útmutató

A belső hálózat konfigurálása

A szerzõrõl... xi Bevezetés... xiii

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Entity Framework alapú adatbáziselérés

Pénzügyi algoritmusok

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

Bérprogram vásárlásakor az Ügyfélnek ben és levélben is megküldjük a termék letöltéséhez és aktiválásához szükséges termékszámot.

Bevezetés az SAP világába. 5. Kommunikációs és integrációs technológiák

Segédanyag: Java alkalmazások gyakorlat

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

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

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

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

OOP #14 (referencia-elv)

Tisztelt Ügyfelünk! Tájékoztató az átállásról

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Hardver és szoftver követelmények

Objektumorientált Programozás III.

Windows hálózati adminisztráció segédlet a gyakorlati órákhoz

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

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Tartalomjegyzék. Levelezéshez kapcsolódó alapfogalmak

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Java Business Integration szolgáltatásalapú architektúra JavaEE környezetben. Simon Géza Zsemlye Tamás

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

A MOKKA hitelesítő szoftver telepítése és használata


Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0

Számítógépes munkakörnyezet II. Szoftver

KIRA. KIRA rendszer. Telepítési útmutató v1

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

OCSP Stapling. Az SSL kapcsolatok sebességének növelése Apache, IIS és NginX szerverek esetén 1(10)

Átírás:

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@nik.bmf.hu 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@nik.bmf.hu 3

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@nik.bmf.hu 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@nik.bmf.hu 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 Közzétesz Keres Szolgáltató Szolgáltat Igénybe vesz Szolgáltatást igénybe vevő katona.krisztina@nik.bmf.hu 6

Szabványok és protokollok 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 Felderítés UDDI, DISCO Leírás WSDL 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 A Microsoft megoldása szolgáltatások hirdetésére Üzenet SOAP Átvitel HTTP, SMTP, katona.krisztina@nik.bmf.hu 7 Szabványok és protokollok 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. Felderítés UDDI, DISCO Leírás WSDL Üzenet SOAP WSDL: Web Services Description Language A kérés és a válasz leírását adja meg Átvitel HTTP, SMTP, katona.krisztina@nik.bmf.hu 8 Szabványok és protokollok Az üzenetet el kell küldeni a szolgáltatónak, ami az adatokat feldolgozva válaszüzenetet küld Felderítés UDDI, DISCO Leírás WSDL SOAP: Simple Object Access Protocol Üzenetek küldésére használt protokoll Üzenet SOAP Átvitel HTTP, SMTP, Az eddigi protokollok és szabványok az XML (Extensible Markup Language) nyelven alapulnak katona.krisztina@nik.bmf.hu 9

Szabványok és protokollok Az üzeneteket át kell vinni a hálózaton keresztül a szolgáltató és a szolgáltatást igénybevevő között A SOAP független az átvitel típusától A legtipikusabb a HTTP (Hypertext Transfer Protocol) 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 Felderítés UDDI, DISCO Leírás WSDL Üzenet SOAP Átvitel HTTP, SMTP, katona.krisztina@nik.bmf.hu 10 Webszolgáltatások megvalósítása.net-ben Logikai kapcsolat Ügyfélalkalmazás Webszolgáltatás Proxy osztály IIS/ASP.NET SOAP SOAP HTTP HTTP TCP/IP TCP/IP Fizikai kapcsolat katona.krisztina@nik.bmf.hu 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@nik.bmf.hu 12

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@nik.bmf.hu 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@nik.bmf.hu 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@nik.bmf.hu 15

FIGYELEM! Az előbbi megoldás Visual Studio 2008-ban csak a szinkron metódushívásnál alkalmazható, ugyanis nem generálódik le a BeginXXX és EndXXX metódus. Aszinkron metódushíváshoz a wsdl parancssori programot kell használni. Ennek mikéntjét lásd később. katona.krisztina@nik.bmf.hu 16 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@nik.bmf.hu 17 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 távoli metódus) Proxy osztály 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@nik.bmf.hu 18

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@nik.bmf.hu 19 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@nik.bmf.hu 20 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@nik.bmf.hu 21

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@nik.bmf.hu 22 Megoldás egy lehetséges eset WeatherService.GlobalWeather weather = new WeatherService.GlobalWeather(); string response = weather.getcitiesbycountry(textboxcountry.text); System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.loadxml(response); 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(); Az XML dokumentum reprezentációja a memóriában Az XML dokumentumba betöltjük a kaptott eredményt 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@nik.bmf.hu 23 Megoldás XLINQ-val* A megoldás legalább 3.5-ös.NET keretrendszert igényel. A declaratív leírás elemei a System.Linq névtérben találhatók. Az XLINQ használatához szükségünk van a System.XML.Linq assembly-re és azon belül a System.XML.Linq névtér osztályaira WeatherService.GlobalWeather weather = new WeatherService.GlobalWeather(); string response = weather.getcitiesbycountry(textboxcountry.text); XElement elem = XElement.Parse(response); IEnumerable<string> citynames = from city in elem.elements("table") select (string)city.element("city"); forreach (string city in citynames) comboboxcities.items.add(city); comboboxcities.text = comboboxcities.items[0].tostring(); Az XML dokumentum reprezentációja a memóriában Deklaratív módon lekérjük a City nevű tagek adatait. A kapott eredményeken végigmenve feltöltjük a comboboxot a városok neveivel katona.krisztina@nik.bmf.hu 24

LINQ és XLINQ ízelítő egy nagy témából Language-Integrated Query Általános lekérdező funkció hozzáadása a keretrendszerhez Probléma nélkül integrálódik az eddigi.net nyelvekhez Osztályokkal, SQL és XML adatokkal is használható DLINQ = LINQ to SQL XLINQ = LINQ to XML string[] names = "John", "Peter", "Joe", "Patrick", "Donald", "Eric"; IEnumerable<string> nameswithfivecharacters = from name in names where name.length < 5 select name; listbox1.items.clear(); foreach(string name in nameswithfivecharacters) listbox1.items.add(name); katona.krisztina@nik.bmf.hu 25 Feladat Tegyük felhasználóbaráttá a programot Kezeljük a nem várt eseteket katona.krisztina@nik.bmf.hu 26 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@nik.bmf.hu 27

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@nik.bmf.hu 29 Webszolgáltatások megvalósítása.net-ben Logikai kapcsolat Ügyfélalkalmazás Webszolgáltatás Proxy osztály IIS/ASP.NET SOAP SOAP HTTP HTTP TCP/IP Fizikai kapcsolat TCP/IP katona.krisztina@nik.bmf.hu 30

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@nik.bmf.hu 31 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: 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 A metódusok által dobható kivételek: NoJokeException EmptyFileException A Category felsorolás tartalmazza a viccek kategóriáit katona.krisztina@nik.bmf.hu 32 A Jokes.dll tartalma katona.krisztina@nik.bmf.hu 33

ASP.NET webszolgáltatás létrehozása Visual Studioval New Web Site ASP.NET Web Service Ha helyét a fájlrendszerben adjuk meg, akkor teszteléskor a VS által generált IIS szerveren fut a szolgáltatás A létrejött fájlok 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@nik.bmf.hu 34 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@nik.bmf.hu 35 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@nik.bmf.hu 36

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@nik.bmf.hu 37 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@nik.bmf.hu 38 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@nik.bmf.hu 39

Kivételkezelés szolgáltatói oldal try JokeSelection js = new JokeSelection(Server.MapPath("App_Data") + "//"); return js.numofjokes(category); catch (Exception ex) 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); A vicceket tartalmazó fájlok az App_Data mappában vannak. Minden kivételt elkapunk. A SoapException.Code tulajdonság nem sztring 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. katona.krisztina@nik.bmf.hu 40 Kivételkezelés felhasználói oldal try JokeProviderService.JokeProviderService js = new JokeProviderService.JokeProviderService(); catch (System.Web.Services.Protocols.SoapException ex) switch (ex.code.tostring()) case "Client.NoJoke": MessageBox.Show(ex.Message); break; default: MessageBox.Show(ex.Code + "\n\n " + ex.message); break; Elkapjuk a SoapException kivételeket. A kivétel kódja nincs benne a WSDL-ben, máshonnan ismerjük. katona.krisztina@nik.bmf.hu 41 Telepítési módok Másolás (Copy 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 Publikálás (Publish Web Site) 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@nik.bmf.hu 42

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@nik.bmf.hu 43 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@nik.bmf.hu 44 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@nik.bmf.hu 45

Webszolgáltatások Webszolgáltatások felhasználása aszinkron metódushívással Aszinkron metódushívás Ismétlés delegate «visszatérési típus» Képviselő(«paraméterek»); Képviselő k = new Képviselő(«hívandó metódus»); IAsyncResult «objektum» = k.begininvoke(«paraméterek»); //...tetszőleges kód, amely a képviselt metódussal párhuzamosan fut majd «visszatérési típus» eredmény = k.endinvoke(«objektum»); A BeginInvoke meghívására egy külön szálon elindul a <<hívandó metódus>> végrehajtása A végrehajtással párhuzamosan tetszőleges kódot futtathatunk Az EndInvoke meghívásakor a <<hívandó metódus>> befejezéséig blokkolódik a program, majd megkapjuk a metódus visszatérési értékét A BeginInvoke és az EndInvoke között az összekötő az IAsyncResult egy példánya katona.krisztina@nik.bmf.hu 47 Aszinkron metódushívás Hollywood stílusban Nincs meghatározva, hol várunk a metódus befejezésére A metódus befejeződéséről egy úgynevezett callback képviselő értesít. Vagyis végrehajtódik a képviselőhöz adott metódus. A képviselőt a BeginInvoke utolsó előtti paramétereként adhatjuk meg Az EndInvoke metódust a képviselőhöz adott metódusban hívjuk meg private void CallBack(IAsyncResult ar) response = email.endinvoke(ar); IAsyncResult ar = email.begininvoke( request, new AsyncCallback(CallBack), null); katona.krisztina@nik.bmf.hu 48

Aszinkron metódushívás webszolgáltatásoknál A Visual Studio 2008 esetében a parancssori wsdl paranccsal elkészítjük a webszolgáltatáshoz tartozó proxy osztályt Paraméterként meg kell adni az osztály nyelvét és a webszolgáltatás wsdl fájljának elérési útját wsdl /l:cs http://.../xwebemailvalidation.wsdl A proxy osztály tartalmaz egy BeginWebszolgNév és egy EndWebszolgNév metódust, amelyek ugyanúgy viselkednek, mint az aszinkron metódushívásnál megismert BeginInvoke és EndInvoke metódusok katona.krisztina@nik.bmf.hu 49 Feladat Készítsünk egy regisztrációs formot, amely email címet és egyéb adatokat kér a felhasználótól A regisztráló csak akkor mehet tovább az oldalról, ha a megadott email címe valós Keressünk webszolgáltatást, amely az email címek valódiságát ellenőrzi A cím ellenőrzése alatt a regisztráló legyen képes az adatlap többi részét kitölteni katona.krisztina@nik.bmf.hu 50 Megoldás egy lehetséges eset 1. Email cím ellenőrzés található az alábbi helyen: http://ws.xwebservices.com/xwebemailvalidation/v2/ XWebEmailValidation.wsdl A szolgáltatásról információk itt http://www.xwebservices.com/web_services/xwebe mailvalidation/ Használjuk a wsdl programot a proxy osztály elkészítéséhez wsdl /l:cs http://ws.xwebservices.com/xwebemailvalidation/v2/xweb EmailValidation.wsdl katona.krisztina@nik.bmf.hu 51

Megoldás egy lehetséges eset 2. Az elkészült EmailValidation.cs fájlt adjuk a projekthez A fájl tartalma EmailValidation proxy osztály BeginValidateEmail és EndValidateEmail metódusokkal ValidateEmailRequest a kérés paramétereihez ValidateEmailResponse osztály a válaszhoz ValidateEmailResponseStatus felsorolás mutatja a cím helyességét A System.Web.Services assembly-t adjuk a referenciákhoz katona.krisztina@nik.bmf.hu 52 EmailValidation email = new WSAsyncInv.EmailValidation(); private void ValidateAsync() ValidateEmailRequest request = new WSAsyncInv.ValidateEmailRequest(); request.email = textboxemail.text; IAsyncResult ar = email.beginvalidateemail(request, new AsyncCallback(CallBack), null); private void CallBack(IAsyncResult ar) ValidateEmailResponse response = email.endvalidateemail(ar); private void textboxemail_validating(object sender, CancelEventArgs e) ValidateAsync(); katona.krisztina@nik.bmf.hu 53 További felmerülő probléma Mivel aszinkron metódushívásnál a metódus és a callback metódus végrehajtása a Form szálától különböző szálon történik, ezért a vezérlők a fenti metódusokban nem módosíthatók Megoldás: minden vezérlőnek van egy Invoke metódusa, amely a paraméterként megkapott képviselőt a vezérlőt tulajdonló szálon futtatja Tehát: Készítsünk egy metódust, amely a vezérlőkön a webszolgáltatás befejezésekor elvégzendő feladatokat tartalmazza Készítsünk hozzá egy képviselőt Egy vezérlő Involke metódusán keresztül hívjuk meg a képviselőt katona.krisztina@nik.bmf.hu 54

A felmerült probléma megoldása delegate void RefreshDelegate(ValidateEmailResponseStatus status); private void CallBack(IAsyncResult ar) ValidateEmailResponse response = email.endvalidateemail(ar); RefreshDelegate refresh = RefreshForm; //new RefreshDelegate(RefreshForm); labelvalid.invoke(refresh,response.status); private void RefreshForm(ValidateEmailResponseStatus status) switch (status) case ValidateEmailResponseStatus.VALID: labelvalid.text = "OK"; break; case ValidateEmailResponseStatus.NOT_VALID: labelvalid.text = "Helytelen email cím"; break; default: labelvalid.text = "Nem sikerült az ellenőrzés"; break; katona.krisztina@nik.bmf.hu 55 Ajánlott irodalom XML összefoglaló Steve Graham et al: Java alapú webszolgáltatások Webszolgáltatások bevezető John Sharp: Visual C# 2005 lépésről lépésre Webszolgáltatások angolul A. Freeman, A. Jones: Microsoft.NET XML Web Services Step by Step Telepítés http://msdn2.microsoft.com/enus/library/7hd4c0x3(vs.80).aspx XML adatkezelés http://msdn2.microsoft.com/enus/library/hf9hbf87(vs.80).aspx katona.krisztina@nik.bmf.hu 56 http://forums.devx.com/archive/index.php/t-16677.html