C# - WebService készítése

forráskód letöltése
WebService készítésével egy érdekes és sokat ígérő újdonság tárgyalásába kezdünk mostani cikkünkkel. E téma külön könyvet is megérdemelne, így első cikkünkben csak annak alapjait mutatjuk be egy gyakorlati példán keresztül kezdve onnan, hogy mi is az a WebService, hogyan hozhatunk létre olyat és miként tudunk felhasználni egy már meglévőt.
A mellékelt példa használatához szükséges a web szerveren egy FirstWebService nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ha a web szerverünk nem a localhost-on fut, akkor a TestApp példában lévő URL-t módosítani kell, a program futtatása előtt!
Leegyszerűsítve a WebService-re tekinthetünk úgy, mint egy olyan ASP.NET-es internet alkalmazásra, mely HTTP-n keresztül elérhető és a futásának eredményét XML formátumban szolgáltatja. Ennél persze sokkal többről van szó, de lényege ez. A WebService-ben deklarálhatunk függvényeket (WebMethod), melyek hívása HTTP-n keresztül – szükség esetén paraméterezve – meghívható. A WebService a szükséges műveletek elvégzése után egy XML formátumú választ küld, melynek szabványos a tartalma, így azt bármilyen alkalmazás értelmezheti. Mivel a WebService szabványos kimenetet eredményez, így adott a lehetőség, hogy ne csak a Visual Studio.NET-el készítsünk ilyet, hanem más fejlesztői környezettel is. Például a Delphi 6-os verziójától kezdve már támogatja a WebService-ek készítését.
Nézzünk egy egyszerű példát: legyen egy olyan WebService-ünk, melyben létrehozunk egy olyan függvényt (WebMethod), mely két egész számot vár paraméterként, melyeket összead. Ennek eredményét megkapjuk egy szabványos, XML formátumú adathalmazban. Ha publikáljuk ezt a WebService-t az interneten, akkor bárki, vagy bármilyen alkalmazás meghívhatja ezt a függvényt és így elvégezheti két szám összeadását. Ennél persze jóval bonyolultabb funkciókat is elhelyezhetünk az interneten. Gondoljunk csak el a következőt: ha web szerverünkön állandóan rendelkezésre állnak a valutaárfolyamok, akkor könnyedén készíthetünk olyan WebService-t, melynek függvényei szolgáltatják az árfolyamokat és azok közötti átváltást. Ezt felhasználva más cégek készíthetnek olyan web oldalt, mely a mi WebService-ünket felhasználva folyamatosan tájékoztatja az internetezőket a valuta árfolyamokról és átváltási lehetőséget is biztosítanak. Ehhez csupán a WebService-ünk függvényeinek nevét és paraméterezését kell ismerni és a feladat egyszerűen megvalósítható. Mivel az eredmény halmaz szabványos formátumú, így tulajdonképpen hardver és szoftver függetlennek tekinthetjük a WebService megoldását, így a valutaváltó WebService szolgáltatást akár egy mobil telefonon keresztül is kihasználhatjuk, vagy bármilyen olyan eszközön, mely képes az internettel kapcsolatot teremteni.
Létrehoztak egy WebService leíró nyelvet, mely meghatározza, leírja, hogy egy WebService egyes függvényeit miként tudjuk meghívni. Ez a Web Services Description Language (WSDL).
Az adatok feldolgozásában részt vesz az egyszerű objektum hozzáférési protokoll, vagyis a Simple Object Access Protocol (SOAP).
A gyakorlati megvalósításnál a Visual Studio.NET leveszi vállunkról a programozás nehézségeinek terhét, így nekünk csak a függvények létrehozásával, illetve a kapott XML adatok feldolgozásával kell foglalkoznunk, minden egyéb szükséges tennivalót a Visual Studio.NET által készített alkalmazásunk „gyárilag” elvégzi.
Nézzük miként történik mindez.
WebServices létrehozásához válasszuk a File – New – Project menüpontot, majd a Visual C# Project elemei közül az ASP.NET Web Service elemet.
Egy interneten keresztül meghívható függvény készítéséhez épp úgy kell a függvényt létrehozni mint hagyományos esetben, annyi a különbség csupán hogy a WebMethod attribútumot meg kell adnunk.
    [WebMethod] 
    public int Add(int a, int b) 
    {
      return a + b;
    }
Ezzel a WebService-ünk készen is van! Fordítás után az már használható. Ha futtatjuk az alkalmazást, akkor a Visual Studio.NET olyan web oldalt generál, melynek segítségével tesztelhetjük, vagyis meghívhatjuk paraméterezve a WebService-ünk függvényeit. Így a tesztelésre nagyon egyszerű lehetőségünk van.
Meghívhatjuk persze mi magunk is a WebService-ünk függvényét: http://localhost/FirstWebService/Service1.asmx/Add?a=2&b=3. Így a függvényünk által szolgáltatott eredményt azonnal láthatjuk XML formában.
Következő lépésként most nézzünk arra példát, hogy miként készíthetünk egy olyan alkalmazást, mely meghívja HTTP-n keresztül a WebService-ünk Add függvényét paraméterezve és az eredmény XML-t értelmezi is.
A mellékelt példában ehhez a TestApp nevű projektet hoztuk létre, mely egy egyszerű Windows-os alkalmazás. Ebben egy HTTP kérést intézünk a WebService Add függvénye felé úgy, hogy a szükséges két paramétert a felhasználótól két textBox-ban kérjük be. Az összeadás eredményét, melyet a WebService szolgáltat XML-ben, értelmezzük és a kapott számot megjelenítjük egy Label-en. Így a felhasználó észre sem veszi, hogy a kért művelet elvégzéséhez egy WebService-t hívtunk segítségül.
A HTTP kéréshez készítettünk egy GetWebContent nevű függvényt, melynek paraméterként egy URL-t kell megadni. A függvény visszatérési értéke egy sztring, mely tartalmazza a kérésre adott XML adathalmazt.
    private void button1_Click(object sender, System.EventArgs e)
    {
      textBox3.Text = GetWebContent("http://localhost/FirstWebService/Service1.asmx/Add?a="+textBox1.Text+"&b="+textBox2.Text);
Ezt betöltjük egy XmlDocument osztályba, hogy értelmezni tudjuk.
      XmlDocument xd = new XmlDocument();
      xd.LoadXml(textBox3.Text);
Végül megjelenítjük a Label-en az összeadás eredményét.
      label3.Text = xd.InnerText;
    }