Makale Özeti

Web servislerini yerel bir fonksiyon veya bir alt rutin gibi düşünebilirsiniz. Ancak aradaki bazı farkları gözardı etmemek gerekir. Bunların en başında kullanabileceğiniz veri tiplerinin sınırlı olması gelir. Web servisleri XMl altyapısı taşıdığından önceden tanımlanmış birkaç veritipini kullanabilirler. Aşağıda web servis parametreleri ve dönüş değerleri için kullanabileceğiniz veri tipleri yer almaktadır.

Makale

XML Web Servisleri VI

Web servislerini yerel bir fonksiyon veya bir alt rutin gibi düşünebilirsiniz. Ancak aradaki bazı farkları gözardı etmemek gerekir. Bunların en başında kullanabileceğiniz veri tiplerinin sınırlı olması gelir. Web servisleri XMl altyapısı taşıdığından önceden tanımlanmış birkaç veritipini kullanabilirler. Aşağıda web servis parametreleri ve dönüş değerleri için kullanabileceğiniz veri tipleri yer almaktadır.

 
Veri Tipi Açıklama
Temeller Tamsayılar, kayan nokta sayıları, boolean değişkenler, tarih ve saatler gibi standart veri tiplerini destekler
Numaralandırmalar Numaralandırma tiplerini destekler
DataSet İlişkisel bir veritabanından aldığınız verileri metodlarınızda kullanmanıza olanak sağlar. DataRow ve DataTable desteklenmez.
XMLNode System.Xml.Node sınıfına dayanan nesneler desteklenir.
Özelleştirilmiş Nesneler Özelleştirilmiş bir sınıf veya yapıya dayalıher nesne.
Diziler DataSet,XMLNode ve özelleştirilmiş nesneler de dahil olmak üzere desteklenen tüm veri tipleri için dizi kullanabilirsiniz.

Bu yazı dizisine başlarken verdiğim örnek hemen hepimizin sıklıkla kullandığımız ve web servisi yada xml üzerine yapılan çoğu seminerde örnek olarak gösterilen bir uygulamaydı. Yani döviz kurlarının alınması ve kendi sitemiz veya uygulamalarımızda kullanılması. Bir an için anlık verileri değilde 1 yıl boyunca hergün değişen döviz kuru bilgilerini aldığımızı varsayalım, hatta biraz daha abartıp gün içindeki kur değişimlerini, de bu hesabımızın içine katalım. Bu durumda web servisinize birden fazla metod eklemeniz gerekecektir. Ancak bu durumda birden fazla birbirinin aynı sorgu gerçekleşir. Ve bu tamamen istemci-sunucu mesajlaşması olan web servisinizin performansını direk etkileyecek bir durumdur.

Bu durumda önemli olan ihtiyacınız olan tüm bilgileri bir arada toplayabilen bir veri nesnesi kullanmaktır. Bu nesne için gerekli sınıfları dosyanıza import edebilir ve herhangi bir yerinde parametre ve geri dönüş değerlerini public olarak kullanabilirsiniz.

Veri tiplerini görebilmek açısından küçük bir örnek ile devam edelim:

Bu örneğimizde aslında veritabanından veriler çekilebilirdi ancak burada amaç veritipleri üzerinde konuşmak olduğu için ilk etapta sabit bazı verileri kendimiz elle gireceğiz.

Imports System.Web.Services

<WebService(Description:="Bir ürünün şu anki fiyatı, yıl içindeki en düşük ve en yüksek fiyatını gösterir",NameSpace:="http://www.maxiasp.net/urunler")>

Public Class UrunFiyatCizelge

Inherits System.Web.Services.WebService

<WebMethod(Description:="Urun hakkında detay içerir")>
Public Function StokBilgisiGetir(UrunKodu As String) As StokDurumu
      Dim Fiyat As New StokDurumu()
      Fiyat.Symbol = UrunKodu
      Fiyat = FiyatAlaniniDoldur(Fiyat)
      Return Fiyat
End Function

Private Function FiyatAlaniniDoldur(Durum As StokDurumu) As StokDurumu
     Dilerseniz buraya veritabanı kodlarını alabilirsiniz
     Biz şimdilik elle dolduracağız

     Durum.FirmaAdi = "Demo Firması"
     Durum.Tutar = 5000000
     Durum.EnYuksekFiyat = 6000000
     Durum.EnDusukFiyat = 4000000
     Return Durum
End Function

Public Class StokDurumu
     Public Tutar As Decimal
     Public Symbol As String
     Public EnYuksekFiyat As Decimal
     Public EnDusukFiyat As Decimal
     Public FirmaAdi As String
End Class

Burada yaptıklarımızı maddeler halinde listeleyelim:

- Yeni bir StokDurumu nesnesi oluşturduk.
- StokDurumu nesnesine karşılık gelen Symbol u tanımladık.
- StokDurumu nesnesini ona bilgi yükleyen -tekrar hatırlatmakta fayda var bu kısmı veritabanından da alabilirsiniz- FiyatAlaniniDoldur adında bir fonksiyona taşıdık.

Burada dikkat edilecek konulardan birincisi FiyatAlaniniDoldur fonksiyonunun Private tanımlanmış olması. Bu istemciye açık olmadığı anlamına geliyor. Hatta diğer sınıflar tarafından da görülemez.

ASP.Net WSDL dokumanı içine veritiplerinizi yerleştirecektir:

<types>
<s:ComplexType name="StokDurumu">
  <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="Tutar" type="s:decimal" />
    <s:element minOccurs="1" maxOccurs="1" name="Symbol" nillable="true" type="s:decimal" />
    <s:element minOccurs="1" maxOccurs="1" name="EnYuksekFiyat" type="s:decimal" />
    <s:element minOccurs="1" maxOccurs="1" name="EnDusukFiyat" type="s:decimal" />
    <s:element minOccurs="1" maxOccurs="1" name="FirmaAdi" nillable="true" type="s:string" />
  </s:sequence>
</s:ComplexType>
</types>

Bu web servisi istemci tarafından çalıştırıldığında ekran çıktısı şu XMl dosyadan ibaret olacaktır:

<?xml version="1.0" encoding="utf-8" ?>
<StokDurumu xmlns="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.maxiasp.net/urunler">
<Tutar>5000000</Tutar>
<Symbol>TL</Symbol>
<EnYuksekTutar>6000000</EnYuksekTutar>
<EnDusukTutar>4000000</EnDusukTutar>
<FirmaAdi>Demo Firması</FirmaAdi>
</StokDurumu>

Bir sonraki yazımızda web servislerinin kullanımına değineceğiz.