5 Aralık 2010 Pazar

Web Service(Web Servis) Kavramı

Hepimiz, hergün farklı farklı browserlardan internete giriyoruz. Gireceğimiz sitenin adresini yazıyoruz, yaklaşık 3-4 sn bekledikten sonra o site karşımıza geliyor. Ne kadar basit değil mi? Bilmeyiz ki arka planda neler dönüyor. Yada başka bir senaryo daha, bazı sitelerde (genellikle e-ticaret sitelerinde) dolar,euro kurunu bize gösterirler. Gün içinde de sürekli değişir. Bu yapı nasıl işliyor? Ekranın karşısında, bi yandan merkez bankasını takip edip, diğer yandan da o değişiklikleri siteye mi yansıtıyorlar. Tabi ki cevabımız hayır.

Şimdi bu iki senaryoyu birleştirelim;

Kullanıcı sitenin adresini yazdığı zaman, arkada life cycle dediğimiz süreç başlıyor. IIS dediğimiz (Internet Information Services) yapı devreye giriyor ve bu sitenin uzantısına, yapısına ...vs bakarak, sitenin aspx mi, java mı, php mi olduğuna karar veriyor. aspx olan sayfayı Work Processor dediğimiz yapıya aktarıyor ve bu yapı da bize o sayfanın html kodlarını render ediyor ve browser'da geri gönderiyor. Her talepte bu sistem tekrar en baştan çalışıyor. Dolar-Euro kuruna gelecek olursak da, sürekli aktif olarak değişen bu sistem için tekrar tekrar html kodlarını göndermeye ne gerek var değil mi? Ayrıca sürekli ekran başında değiştirmek ne kadar da saçma geliyor.

İşte web servis dediğimiz yapı, istemciye html kodlarının değil de sadece datanın gönderildiği yapıdır. Dolayısıyla sadece data gönderildiğinden, senaryomuz üzerinden konuşursak, dolar/euro kurunda değişen her fiyat için merkez bankasının yazmış olduğu web service değiştiğinde otomatik olarak bizim sitemizdeki görüntü de değişecektir. Böylece sitemiz sürekli güncel kalmış olacak...

Kısaca kullanımından bahsedelim. Class yazımından hiç bir farkı yok. Tek farkı kendi projemizde veya makinemizde olmayacak bu class. Uzak bilgisayardan çağıracağız bu servislere. Dolayısıyla da proxy dediğimiz vekil metotlara ihtiyacımız olacak çağırma işlemi yaparken. Şimdi kısaca web service nasıl çağrılır, projede nasıl kullanılır, kısaca üstünden geçelim.

Öncelikle Web servis yazmak için projemize sağ tıklayıp add new item ile Web Service ekliyoruz. Eklediğimiz zaman göreceğiz, hem asmx uzantılı, hem de asmx.cs uzantılı iki dosyayı eklediğimizi göreceğiz. 'cs' ile csharp dosyası olduğunu anlıyoruz ve işte buradan web servisimizi yazacağız. Kısaca bir metot yazalım buraya.

[WebMethod]

public int Test(int Parametre)

{

return Parametre+ 5;

}

WebMethod attribute'ini yazarak yazdığımız metodun Web Servis Metodu olduğunu belirtiyoruz. Daha sonra çalıştırdığımızda,

gibi ekran ile karşılaşacağız. Bu sayfada denemelerimizi yapabiliriz. Ayrıca Service Description'ı tıkladığımızda bize bir url bilgisi verilecek. İşte bu url'yi, sayfamızda add service reference diyip, adres satırına yapıştırıp go dediğimiz zaman web servisimizi projemize tanıtmış olacağız. Bu url bilgisi WSDL'dir. Yani bize, web servis hakkında bilgiler veren, hangi parametreleri aldığını, geriye ne döndürdüğünü, ne tür işlemler yapıldığı gibi bilgileri verir. Bundan sonra da projemizde, servis referansını eklediğimizde oluşan namespace ile web servisimize rahatlıkla erişmiş olacağız.

protected void Page_Load(object sender, EventArgs e)

{

Service.WebServiceSoapClient service = new Service.WebServiceSoapClient();

int a = 5;

Label1.Text = service.Test().ToString();

}


Gördüğünüz gibi, servisimize rahatlıkla erişip, değeri web sitemizde bir labe'in içine yazdırdık. Dışardan alınan web servis hizmetleri de yine aynı şekilde. WSDL aracılığıyla önce web methodun özelliklerini tanıyıp, add service reference ile urlsini girdikten sonra, o servise erişip, gerekli parametreleri verdikten sonra geri dönüş değerine göre istediğimiz işlemleri yapabiliriz.

Web Servisi ile ilgili önemli notlar:

  • Web servisleri platform bağımsızdır. Yani C# ile yazılmış bir web servis, java uygulamalarında çalışır. Tersi de geçerlidir yine. Tek yeterli şart,kullandığımız yapının diğer dillerde de destekleniyor olmasıdır. Örneğin generic metodlar, java dilinde bulunmadığından yazacağımız generic web servis javada çalışmayacaktır.
  • Yazdığımız web servisteki metotlarımız geri değer döndürmelidir. Döndürmezse hata vermez fakat işe yaramaz. Geriye, int,string,decimal,int[],list döndürebilir. Fakat, örneğin fonksiyon int döndürse bile, bize gelen kodlar xml formatında olacaktır. Yani metot stringe dönüştürülüp, xmle kaydedildikten sonra web servisten bizim projemize değerler gelir.

0 yorum: