Öncelik bir adet Windows Forms uygulamasını Visual Studio 2005 içerisinde File->New->Project->Windows Application diyerek oluşturuyoruz.Projemizin ismini Weather olarak belirledikten sonra oluşturulan Formun ismini FrmWeather olarak değiştirip,projeye sağ tıklayıp Add Web referans diyoruz.Karşımıza çıkan ekranda, adress bar kısmına http://www.webservicex.net/globalweather.asmx?wsdl değerini giriyoruz.

Web Service’i projemize ekledikten sonra Formu aşağıdaki gibi tasarlıyoruz;

Form üzerindeki “Şehirleri Getir” butonuna tıklandığında çağrılacak olan metod şu şekilde olacaktır;
|
private void btnSehirleriGetir_Click(object sender, EventArgs e)
{
GlobalWeather weather = new GlobalWeather();
string sehirlerXML = weather.GetCitiesByCountry("Turkey");
XmlReader reader = XmlReader.Create(new StringReader(sehirlerXML));
DataSet ds = new DataSet();
ds.ReadXml(reader);
gvSehirler.DataSource = ds.Tables[0];
}
|
Öncelikle Web Service proxy sınıfının bir nesnesi oluşturulmaktadır.Bu sınıfın GetCitiesByCountry fonksiyonu parametre olarak ülke ismi almaktadır.parametre olarak Turkey gönderiyoruz.Bu fonksiyondan dönen aşağıdaki gibidir;

Liste bu şekilde uzayıp gitmektedir.Yani web service bize şehirleri bir xml dökümanı biçiminde döndürmektedir.Bu şekilde gelen verileri okuyabilmek için XmlReader sınıfını kullanıyoruz.XmlReader, abstract bir sınıf olduğundan dolayı nesnesi oluşturulamamaktadır. Onun yerine static olarak tanımlanmış Create fonksiyonunu kullanıyoruz.Create fonksiyonu bizden TextReader türünde bir değer almaktadır.StringReader sınıfı da TextReader sınıfından türetildiğinden dolayı bir adet StringReader nesnesini constructor’a parametre olarak gönderiyoruz.tabi StringReader’ın constructor’ına da elde ettiğimiz xml dökümanını veriyoruz.
DataSet’in ReadXml fonksiyonu bizden XmlReader nesnesi almaktadır.
|
DataSet ds = new DataSet();
ds.ReadXml(reader);
gvSehirler.DataSource = ds.Tables[0];
|
satırlarıyla birlikte xml dökümanını DataSet’e aktarıp GridView üzerinde gösteriyoruz.
Kullanıcı bir şehri seçtiğinde bu şehre ait sıcaklık ve basınç bilgilerini son ölçüm tarihine göre görüntülemek istiyoruz.Kullanıcının seçtiği şehri Belirlemek için GridView’ın SelectionChanged eventini kullanıyoruz.GridView’ın SelectionChanged eventi tetiklendiğinde çağrılacak olan metod aşağıdaki gibidir;
|
private void gvSehirler_SelectionChanged(object sender, EventArgs e)
{
if (gvSehirler.SelectedRows.Count > 0)
{
string sehirIsmi =
gvSehirler.SelectedRows[0].Cells[1].Value.ToString();
GlobalWeather weather = new GlobalWeather();
string havaDurumu = weather.GetWeather(sehirIsmi, "Turkey");
XmlReader reader = XmlReader.Create(new StringReader(havaDurumu));
while (reader.Read())
{
switch (reader.Name)
{
case "Time":
txtSaat.Text = reader.ReadString();
break;
case "Temperature":
txtSicaklik.Text = reader.ReadString();
break;
case "Pressure":
txtBasinc.Text = reader.ReadString();
break;
default:
break;
}
}
}
}
|
GetWeather fonksiyonu da hava durumunu XML dökümanı olarak döndürmektedir.Gelen hava durumu Xml dökümanı aşağıdaki gibidir;

Nurettin ŞİMŞEK