Makale Özeti

Bu makalemizde e-devlet kapsamında http://tckimlik.nvi.gov.tr adresinden sunulan vatandaşlık numarası sorgulama hizmetini xml web servisleri ile alacağız.

Makale

Bu makalemizde e-devlet kapsamında http://tckimlik.nvi.gov.tr adresinden sunulan vatandaşlık numarası öğrenme
hizmetini xml web servisleri ile alacağız.
Uygulamamızı VB.Net ile Asp.Net üzerinde yazacağız.Yeni projemizi “tcKimlikNo”  adıyla oluşturalım.

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 serv As tr.gov.nvi.tckimlik.KPSPublicWebService = New tr.gov.nvi.tckimlik.KPSPublicWebService

        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

        Next

     End Sub

     Private Sub sorgula_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sorgula.Click

        Dim serv As tr.gov.nvi.tckimlik.KPSPublicWebService = New tr.gov.nvi.tckimlik.KPSPublicWebService

        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

    End Sub

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.