Webszolgáltatások
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 2008
[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 2008
[email protected]
3
Webszolgáltatások
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 2008
[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 2008
[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 2008
[email protected]
Szolgáltatást igénybe vevő
6
Webszolgáltatások
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 2008
[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 2008
[email protected]
Szabványok és protokollok
Leírás WSDL
Üzenet SOAP
Átvitel HTTP, SMTP, …
8
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 2008
[email protected]
9
Webszolgáltatások
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 2008
[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 2008
[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 2008
[email protected]
12
Webszolgáltatások
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 2008
[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 2008
[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 2008
[email protected]
15
Webszolgáltatások
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 BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
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 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 2008
[email protected]
18
Webszolgáltatások
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 2008
[email protected]
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 BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
21
Webszolgáltatások
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 2008
[email protected]
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);
Az XML dokumentum reprezentációja a memóriában
Az XML dokumentumba betöltjük a kaptott eredményt
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();
Katona Krisztina BMF NIK 2008
[email protected]
Megoldás – XLINQ-val*
a "City" nevű tagek kinyerése
a „City” nevű tagek tömbjén végigmenve feltöltjük a comboboxot a városok neveivel
23
•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();
Katona Krisztina BMF NIK 2008
[email protected]
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
24
Webszolgáltatások
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 BMF NIK 2008
[email protected]
25
Feladat Tegyük felhasználóbaráttá a programot Kezeljük a nem várt eseteket
Katona Krisztina BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
27
Webszolgáltatások
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 2008
[email protected]
29
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 2008
[email protected]
30
Webszolgáltatások
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 2008
[email protected]
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:
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 2008
[email protected]
32
A Jokes.dll tartalma
Katona Krisztina BMF NIK 2008
[email protected]
33
Webszolgáltatások
ASP.NET webszolgáltatás létrehozása Visual Studioval
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 2008
[email protected]
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 BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
36
Webszolgáltatások
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 2008
[email protected]
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 BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
39
Webszolgáltatások
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 2008
[email protected]
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. 40
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 2008
[email protected]
41
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 2008
[email protected]
42
Webszolgáltatások
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 2008
[email protected]
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 BMF NIK 2008
[email protected]
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 BMF NIK 2008
[email protected]
45
Webszolgáltatások
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 <
> végrehajtása A végrehajtással párhuzamosan tetszőleges kódot futtathatunk Az EndInvoke meghívásakor a <> 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 BMF NIK 2008 [email protected]
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 BMF NIK 2008 [email protected]
48
Webszolgáltatások
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 BMF NIK 2008 [email protected]
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 BMF NIK 2008 [email protected]
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 BMF NIK 2008 [email protected]
51
Webszolgáltatások
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
ValidateEmailRequest a kérés paramétereihez ValidateEmailResponse osztály a válaszhoz
BeginValidateEmail és EndValidateEmail metódusokkal
ValidateEmailResponseStatus felsorolás mutatja a cím helyességét
A System.Web.Services assembly-t adjuk a referenciákhoz Katona Krisztina BMF NIK 2008 [email protected]
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 BMF NIK 2008 [email protected]
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 BMF NIK 2008 [email protected]
54
Webszolgáltatások
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 BMF NIK 2008 [email protected]
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 BMF NIK 2008 http://forums.devx.com/archive/index.php/t-16677.html [email protected]
56