Az Interneten elérhető szolgáltatás
Kalandozva a világhálón könnyen rátalálhatunk a világ talán legnagyobb időjárással foglalkozó vállalatának honlapjára, a www.weather.com címen. A Weboldalon elérhető szolgáltatásuknak – ahol irányítószámok, vagy városok neveinek megadásával juthatunk értékes időjárási információkhoz -, egyelőre nincs programozói szemszögből is érdekes vetülete.
Azonban az időjárási adatok elérésére egy amerikai, a mobilkommunikációval foglalkozó vállalkozás elkészített egy Mobil Weather XML WebService névre keresztelt szolgáltatást, amely már .NET-es kliens-alkalmazásból is elérhető egy Web Reference megadása, vagy proxy osztály létrehozása után.
A szolgáltatás a http://ejse.com/WeatherService/Service.asmx címen érhető el, melyhez a példa-alkalmazásunkban elkészítünk egy proxyt.
A szerviz metódusai használhatók a fenti URL böngészőben történő megadásával is, azonban az eredmény XML-formátumú, mely nem annyira értelmezhető.
A szolgáltatás egyelőre csak amerikai városok időjárásadatait tartalmazza, de várhatóan lesz előrelépés a Föld többi kontinense felé is.
A szolgáltatás implementálása kliensünkben
A szerviz négy elérhető metódussal rendelkezik, a példánkban mi ebből egyet, a GetWeatherInfo nevűt használjuk fel. A metódus paraméterként egy irányítószámot vár, és visszaad egy WeatherInfo típusú objektumot, melynek nyilvános változóit lekérdezve kaphatjuk meg az időjárással kapcsolatos információkat.
Mivel a szolgáltatás angol nyelvterületre készült, így a szöveges tájékoztató angolul informálja a felhasználót. Azonban még így is segítség lehet egy éppen az adott területre utazó számára.
A metódusok eléréséhez szükségünk lesz egy proxy osztályra, melynek elkészítéséhez a Visual Studio.NET WSDL.EXE segédprogramját fogjuk felhasználni. A segédprogramnak paraméterként megadjuk a generálandó állomány nevét, valamint azt a címet, ahol a szerviz megtalálható:
wsdl /out: C:\Service.cs http:// ejse.com/WeatherService/Service.asmx
Az elkészült proxy-osztály rendelkezésre áll, már csak fel kel használni az alkalmazásunkból. Csatolnunk kell projektünkhöz. A proxy felhasználásához el kell érnünk a SOAP protokoll kezeléséhez szükséges névteret, így a forrás fejlécében adjuk meg a következő sort:
using System.Web.Services.Protocols;
Az irányítószámok 00501 és 99950 közötti számok, azonban előfordulhat, hogy valamelyik számhoz nem kapcsolódik létező város. Ezt az alkalmazásban jelezzük. Itt elkapjuk a generálódó SoapException kivételt.
A MŰVELET gombra kattintva indítható a lekérdezés, ahol előbb példányosítanunk kell a Service osztályt, majd meg kell hívnunk az említett GetWeatherInfo metódust a szövegmezőben megadott irányítószámmal:
Service s = new Service();
WeatherInfo wi = new WeatherInfo();
...
wi = s.GetWeatherInfo(zipCode);
A WeatherInfo osztály a következő információkat szolgáltatja:
- Location: az irányítószám alapján megtalált város neve, és az állam rövidítése
- Temperature: az aktuális hőmérséklet Fareinheit-ben, melyet programunkban átalakítunk Celsius mértékegységre (Celsius = (Fareinheit-32)*5/9)
- Forecast: előrejelzés szövegesen, angolul
- Visibility: látótávolság
- Pressure: légnyomás
- Dewpoint: harmatpont
- UVIndex: UV-mutató
- Humidity: páratartalom
- Wind: szélerősség
- ReportedAt: az információkat szolgáltató forrás
- LastUpdated: utolsó frissítés időpontja
A változók könnyen kezelhető karakterlánc-típusúak, így egyszerűen betehetők a Form-on található ListBox kontrolba.
listBox1.Items.Add("Légnyomás: " + wi.Pressure);
...