Taigi, nusprendžiau laužtis į Lietuvos banką. Jau pritraukiau jūsų dėmesį? Lietuvos specialiųjų tarnybų bei FTB taip pat? Šaunu! Viską pradėsim… Čia aš esu priverstas nutraukti savo pasakojimą, nes Redaktorė pareiškė, jog tokie dalykai šitame puslapyje negali būti publikuoti.

Turbūt ne visi žino, o tiems kam reikia žino ir tyli, kad Lietuvos bankas teikia tam tikras web servisų paslaugas. Prieš pradėdamas aiškinti toliau turbūt turėčiau pristatyti truputėlį teorijos? Hm… kam rūpi ta teorija? Einam iš karto prie praktikos.

Pirmiausiai pradėkim nuo paprasto pavyzdžio. Kaip matome pagal specifikaciją mums reikia paduoti valiutos santrumpą ir funkcija gražins šios dienos oficialų kursą. Pabandykit įvesti “USD” arba “EUR” (be kabučių).
Ką gi jau pasiruošę pradėti? Susikūrėt naują Visual Studio C#, kokių komponentų reikės? Aš įsidėsiu Label, o jeigu norite jūs galite dar įsidėti Button, bet aš asmeniškai kodą rašysiu į From funkciją Load.
Svarbiausias dalykas prisikabinti web servisą prie programos, tam atlikti Soliusion Explorer lange paspauskite dešinį ant programos pavadinimo ir pasirinkite Add Web Reference. Atsiradusiame lange įveskite adresą norimo web serviso (pvz. http://webservices.lb.lt/ExchangeRates/ExchangeRates.asmx?op=getCurrentExchangeRate) paspauskite enter. Programa susiras jį ir pasiūlys įsidėti, standartiškai siūlomas pavadinimas yra lt.lb.webservices, tačiau aš tingiu tokį ilgą suvedinėti, todėl jį sutrumpinau iki webservices. Ir paskutinis žingsnis paspausti Add Reference. Taigi, prie visų džiaugsmų šone atsirado dar vienas naujas - web servisas. Dabar jau galim parašyti truputį kodo:

webservices.ExchangeRates webresult = new webservices.ExchangeRates();
label1.Text = webresult.getCurrentExchangeRate("USD").ToString();

Sukuriam naują webservices.ExchangeRates objektą, užklausiam rezultatų ir priskiriam juos label. Paprasta?
Sukompiliuojam, veikia. Šaunu!

Tačiau toks kodas nebūtinai turėtų jus tenkinti. Galbūt jūs norėtumėte, kad būtų galima pasižiūrėti visų valiutų kursus? Ką gi pabandysim taip padaryti pasinaudodami kita web serviso funkcija - getListOfCurrencies. Šiuo atveju funkcijai nereikia paduoti jokių parametrų, bet už tai pažiūrėkite kokius rezultatus jinai gražina.
Pabandom parašyti truputį kodo:

webresult = new webservices.ExchangeRates();
myDataSet = new DataSet();
XmlNode node = webresult.getListOfCurrencies();
XmlNodeReader reader = new XmlNodeReader(node);
myDataSet.ReadXml(reader);

Vėlgi pirmiausia susikuriam naujus webservices.ExchangeRates ir DataSet objektus. Deja, šiuo atveju funkcija gražinanti rezultatus nėra tokia draugiška kaip mes norėtume, todėl jų negalime priskirti iš karto myDataSet, todėl sukuriamas XmlNodeReader objektas, kurį jau galime atiduoti myDataSet.
Aišku šis kodas jums taip paprastai neveiks, nes reikia įtraukti papildomą biblioteką

using System.Xml;

Jeigu jums vistiek dar kyla problemų tuomet skaitykite Darbas su XML failais.

Turbūt jau spėjote pastebėti, kad tas kodas, neišveda jokių rezultatų, o juk taip norėtųsi pažiūrėti kas darosi ar ne? Kad pažiūrėtumėte galite įsidėti dataGridview, jeigu neatsimenate - primenu kodą reikalingą duomenų priskyrimui šiam komponentui:

dataGridView1.DataSource = myDataSet.Tables[0];

Rezultatai nevisai tokie kokių tikėjotes? Aišku ir su tokiais rezultatais galima gyventi, bet nereiktų per anksti pasiduoti. Pabandykite vietoj Tables[0] parašyti Tables[1]. Kaip dabar?
Bet kuriuo atveju nei vienas variantas, aišku, netenkina, netampysiu jūsų už nosies pateiksiu kodą, bet prieš tai, kad būtų dar įdomiau, įsidėsiu listBox, kuriame ir pateiksiu rezultatus:

DataRow [] rows= myDataSet.Tables[1].Select("lang='en'");
foreach (DataRow row in rows)
{
myDataSet.Tables[1].Rows.Remove(row);
}
 
foreach (DataRow ltrow in myDataSet.Tables[1].Rows)
{
listBox1.Items.Add(ltrow[1]);
}

Pirmoji eilutė išrenka visas eilutes, kurių stupelis lang turi reikšmę en, tada ciklo pagalba tokias eilutes pašalinu, na, o antrasis ciklas viską kas liko sušeria listBox.
Jau turime visų valiutų sąrašą, bet tai vis dar ne tai, ką norėjome padaryti. Dabar patobulinsiu valiutos paėmimo kodą aptartą aukščiau, beje, jį aš rašysiu listBox click metode

int number = int.Parse(listBox1.SelectedIndex.ToString());
string money = myDataSet.Tables[0].Rows[number][0].ToString();
label1.Text = webresult.getCurrentExchangeRate(money).ToString();

Paspaudus ant listBox, tam tikras elementas yra pažymimas, pirmojoje eilutėje gauname pažymėto elemento eilės numerį ir pagal tą numerį paimame valiutos kodą saugomą myDataSet. O paskutinė eilutė jau turėtų būti aiški - užklausiame kurso. Dar norėčiau atkreipti dėmesį į Rows[number][0] pirmasis skaičius nurodo eilutės numerį, antrasis stulpelio. Net jei stulpelis yra tik vienas, kaip šiuo atveju, vis tiek jį reikia nurodyti.
Štai ir viskas, beliko tik sukompiliuoti.

Kokia praktinė šio kodo nauda? Greičiausiai jūs nežiūrėsite valiutų kursų kasdien, bet tuo pačiu principu galima pasidaryti įvairių programų pvz.: orų rodymas, Google Maps ir t.t.

Pastaba 1: Programoje nėra jokių apsaugų, kuriant kažką rimtesnio, reiktų apie tai pagalvoti patiems.
Pastaba2: Nesimokykite iš manes programavimo kultūros.

Parsisiuntimui
programa kurią sukurėme.

Nuorodos
Wiki apie web servisus
Uddi specifikacija
Soap specifikacija
Pažintis su Wsdl

Panašūs straipsniai


“Laukinių web servisų medžioklė” komentarų: 5

  1. jungle

    nesuprantu sito “straipsnio” prasmes :)

    1. supazindinti vartotoju kas yra web servisai, kaip ir su kuo jie yra valgomi ?
    2. parodyti kaip sauniai ir paprastai galima pasiekti valiutu kursus is LB ?

    bet kokiu atveju, daugiau straipsnyje yra rasoma apie bet ka kita, tik ne apie web servisus :)

    kam naudinas sis straipsnis ? naujokui ? naujokui, kuris perskaites si straipsni zinos, kad gali projekto contexte paklikinti add web service ir gauti kruva objektu ?

    asmeniskai man tai sis straipsnis atrodo nelabai ko vertas ir juokingas kaip ir pats ponas NePo, kuris man atrodo perskaite kazkoki gal ir labai kieta tutoriala apie .net, vs ir web servisus ir pateike cia kazkokias nuotrupas

    duodu straipsniui 1 bala :)

  2. Kuriam web servisą Pixel.lt

    […] PasteBin « Laukinių web servisų medžioklė […]

  3. » Laužom ir koduojam Archyvas » Pixel.lt

    […] Aš parašiau straipsnius apie C# kalbą: Kuriam savo Task Manager, Darbas su XML failais, Laukinių web servisų medžioklė ir Pažintis su WMI. Kiekvieno straipsnio pabaigoje duodavau atsisiųsti sukurtą programą, bet turbūt daugelį iš jūsų sunervindavo, jog neduodavau kodo ir projekto failų. Čia mano logika buvo tokia: kas norės tas iš .exe bylos išgaus tai, ko jam reikia, o kas nežino kaip tai padaryti, vadinasi nevertas. Šiame straipsnyje kaip tik noriu papasakoti, kaip iš .NET sukurto .exe failo pavogti kodą ir kaip nuo to apsisaugoti. Šiame straipsnyje bus daug paveiksliukų ir mažai teksto. […]

  4. Taupyk laiką programuodamas .NET, o pinigus - rinkdamasis teisingas technologijas » Pixel.lt

    […] vaizduoti. Kaip naudoti internetines paslaugas Windows projektuose lietuviškai yra aprašęs NePo (http://pixel.lt/laukiniu-web-servisu-medziokle.html), todėl kartotis nėra tikslo, mūsų pavyzdyje naudosime paprastą internetinę paslaugą […]

  5. Web Service’ų klientas „po PHP“ | Fokusuojamės į IT

    […] (Demo). Kaip tai padaryti naudojantis .NET priemonėmis yra aprašę kolegos programuotojai čia: http://pixel.lt/laukiniu-web-servisu-medziokle.html, aš supažindinsiu kaip pasiekti WS naudojantis PHP programavimo kalba. PHP serveryje mums reikės […]

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.