Yeni projemizde karşımıza çıkacak olan formda, vatandaşlık numaramızı öğrenmek için xml web servisine göndermemiz
gereken bilgileri alacak form nesnelerimizi yerleştirelim.
Biz sağ taraftaki bilgileri kullanarak servise erişeceğiz. Yani göndereceğimiz bilgiler : il,ilçe,adı,soyadı,baba adı, anne adı,doğum yılı ve cinsiyetidir. Bize dönen değerler de TC kimlik numaramız ve diğer kimlik bilgilerimiz olacaktır.Bu işlem için gerekli form elemanlarının yerleştirilmiş hali aşağıdaki resimde görülmektedir.
Form nesnelerinin ID propertylerinin değerleri mavi ile yanlarında belirtilen değerlerdir.Form nesnelerimiz: İl,ilçe,cinsiyet için dropDownListBox ve diğerleri için birer tane TextBox kullandık. İlk değer olarak bazı yardımcı kelimeler girdik. Bunun dışında bir de cinsiyet için belirtilen nesnemizin Items özelliğine değeri “1” ve “2” olacak şekilde ve Text özelliğine “Erkek” ve “Bayan” olacak şekilde 2 adet item girelim. Neden 1-2 derseniz, web servisinden dönen değerler bu şekilde ve kolaylık olması için derim.Giriş kısmı tamam. Şimdi biraz kod yazalım ama önce web servisine başvurup gerekli referansları almamız lazım. Bunun için frameworkün sağ tarafındaki “Solution Explorer” ı açıp oradan “References” sekmesini açalım ve sağ tıklayıp “Add Web References” seçelim.
Karşımıza çıkan pencerede adres olarak http://tckimlik.nvi.gov.tr/kpspublic.asmx adresini girdik.(Önemli:http://uddi.microsoft.com/search/frames.aspx?frames=true&search=d8aa43d9-71e4-41d1-a4ac-00a473d76dd4 adresinden web servisleri arayıp kendiniz de bunlar üzerinde deneme yapabilirsiniz.Microsoft ve IBM in desteklediği(yanlış hatırlamıyorsam), ücretsiz web servis kayıt ve arama sitesidir.Kişisel web servisleri yazarsanız da kolay bulunması için bu siteye kayıt ettirebilirsiniz. )Başvurduğumuz adreste bulunan web servis bize içindeki fonksiyonları listeler. Sağdaki kutuda “Web reference name” in değeri yazar bu bizim web servisi kodumuzda kullanırken onu çağıracağımız isimdir.”Add Reference” ı tıklayıp işlemimizi tamamlayalım.
Artık servise başvurduğumuza göre işin coding tarafına geçebiliriz.
Öncelikle servisin çalışma mantığını biraz inceleyelim. Biz servise il ve ilçe bilgimizi göndereceğiz ama nasıl? Yine servisin bize sunduğu “IlListesiGetir” fonksiyonundan faydalanarak ve bunu Page_Load da yapacağız ki vatandaş illerin listelenmesi için extra bir şey yapmasın. Sayfa açılıp ili seçince bizim seçilen ile ait ilçeleri listelememiz gerek. Devletimiz sağolsun onu da esirgememiş “IleBagliIlceListesiGetir” fonksiyonuyla bize sunmuş J.Aslında servisten (TC no)sorgularken bizden il ve ilçe adını almıyor, sadece bize gönderdiği “IleBagliIlceListesiGetir” fonksiyonu ile gelen “ilcekodu” değerini istiyor.Ama biz kullanıcılar ilçe kodlarımızı bilemeyebiliriz o nedenle bu şekilde listelerle uğraşıyoruz.Daha sonra da diğer bilgilerle tamamını bir custom type değişkene atıp parametre olarak “KisiBilgisindenKimlikBilgisiSorgula(vatandasBilgileri)” fonksiyonuna gönderiyoruz ve bize değer olarak varsa vatandaşlık numaramızı gönderiyor.Şimdi yapıyı ve çalışma prensiplerini anladıysak geriye sadece syntax kalıyor.
Sayfa ilk açıldığında iller otomatik listelensin istiyoruz. Önce servisi kullanmak için “serv” nesnesini inherit ettik. IlBilgisi çift boyutlu bir dizi tipidir , IlListesiGetir fonksiyonuna parametre göndermeden çıktı olarak illeri içeren dizi alırız. Bu dizi bize il kodunu (01,02…) , il adını (ADANA,ANKARA..) verir.
İli seçtikten sonra çalışan yukarıdaki eventimiz önce ilList deki seçili olan ilin kodunu alıyor, ilceBilgisi tipindeki elemanlardan oluşan ilceDizi dizisini oluşturuyoruz ve servisten elimizdeki “ilKodu” nu parametre olarak yollayarak o ile ait ilçelerin listesini istiyoruz. Son olarak elimizdeki listeyi ilceList adındaki dropdownListBox ımıza dolduruyoruz.
Geldik son eventimiz olan sorgula butonunun tıklanmasına. Her zamanki gibi servisi alıyoruz. getirVeri adında bir nesne tanımlıyoruz aslında inherit ediyoruz.Bu değişkenimiz servise gönderilecek verilerin tümünü içeriyor. Sonra bu değişkeni “KimlikBilgisi” tipinde bir nesne döndüren “KisiBilgisindenKimlikBilgisiSorgula()” fonksiyonuna parametre olarak gönderiyoruz.Artık elimizde “tcNo1” içinde tüm dönen değerlerimiz mevcut.Bunlar ad,soyad,tcno vs..vs.. Geriye bir tek vatandaşa cevabı bildirmek kalıyor. Biz bu işlemi yine aynı form üzerinde yine kendisinin doldurduğu fieldlar üzerinde yapıyoruz. Eğer girilen bilgilere sahip bir vatandaş kaydı bulunamazsa uyarı mesajını sayfaya veriyoruz.Alacağımız çıktı (eğer bilgilerimiz doğruysa) aşağıdaki gibi olacaktır ( Bilgilerin bazılarını kapattım ve vatandaşlık no üzerini çizdim:).
Küçük bir uygulama ile xml web servislerini nasıl kullanırız, kısaca inceledik. Kodların tamamını aşağıda görebilirsiniz. Konu ile ilgili sorularınız olursa email ile ulaşabilirsiniz.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim serv As tr.gov.nvi.tckimlik.KPSPublicWebService = New tr.gov.nvi.tckimlik.KPSPublicWebService
Dim ib() As tr.gov.nvi.tckimlik.IlBilgisi = New tr.gov.nvi.tckimlik.IlBilgisi() {}
ib = serv.IlListesiGetir()
For sayac As Integer = 0 To ib.Length - 1
ilList.Items.Add(ib(sayac).Ad)
ilList.Items(sayac).Value = ib(sayac).Kod
Next
End Sub
Private Sub ilList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles ilList.SelectedIndexChanged
ilceList.Items.Clear()
Dim ilKodu As Integer = CInt(ilList.Items(ilList.SelectedIndex - 1).Value)
Dim ilceDizi() As tr.gov.nvi.tckimlik.IlceBilgisi = New tr.gov.nvi.tckimlik.IlceBilgisi() {}
ilceDizi = serv.IleBagliIlceListesiGetir(ilKodu)
For sayac As Integer = 0 To ilceDizi.Length - 1
ilceList.Items.Add(ilceDizi(sayac).Ad)
ilceList.Items(sayac).Value = ilceDizi(sayac).Kod
Private Sub sorgula_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sorgula.Click
Dim getirVeri As tr.gov.nvi.tckimlik.TemelBilgilerdenKimlikBilgisi = New tr.gov.nvi.tckimlik.TemelBilgilerdenKimlikBilgisi
getirVeri.Ad = ad.Text
getirVeri.Soyad = soyad.Text
getirVeri.AnaAd = anad.Text
getirVeri.BabaAd = babad.Text
getirVeri.IlceKod = CInt(ilceList.SelectedItem.Value)
getirVeri.Cinsiyet = cinsi.SelectedItem.Value
getirVeri.DogumYil = CInt(dyil.Text)
Try
Dim tcNo1 As tr.gov.nvi.tckimlik.KimlikBilgisi = serv.KisiBilgisindenKimlikBilgisiSorgula(getirVeri)
tcNo.Text = tcNo1.TCKimlikNo.ToString()
ad.Text = tcNo1.Ad
soyad.Text = tcNo1.Soyad
anad.Text = tcNo1.AnaAd
babad.Text = tcNo1.BabaAd
dyil.Text = tcNo1.DogumYil.ToString()
Select Case tcNo1.Cinsiyet
Case tr.gov.nvi.tckimlik.CinsiyetTipi.Erkek
cinsi.SelectedIndex = 1
Case tr.gov.nvi.tckimlik.CinsiyetTipi.Kadin
cinsi.SelectedIndex = 2
End Select
Catch ex As Exception
Response.Write("Girilen verilere uyan vatandaş bulunamadı")
End Try
Merak edenler için bu makalemizde vatandaşlık numarası aldık. Haftaya yine aynı saatte, başka bir makalede görüşmek dileğiyleJ.