Web Servislerini kullanarak TC Kimlik No sorgulama (Düzeldi)

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: kimlik no ve tüm bilgiler

Mesaj gönderen aslangeri »

kimene yazdı:Sadece vatandaşlık no yu göndererek kişinin bütün kimlik bilgilerini alamazmıyız
alırsın tabi ondan sonrada adamın ocağına incir ağacı dikersin.
şaka bir yana eğer iyi bir lobi yaparsanız mernisdekilerle anlaşıp alabilirsiniz.
yani enseniz kalın olmalı.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Aslında sorun şu..

Mesaj gönderen Murat DİCLE »

Sorun ne utf-8 ne de HTTPRIO'da...

Sorun minik bir tip tanımlamasındadır.

Arkadaşımız düzelttiğim dediği kodu, inanın bana tesadüfen yapmıştır. Sakın kızmasın bana çünkü, WSDL'yi diske kaydetmiş denemiş, bir kpspublic.pas içinde bir iki yeri dğeiştirmiş. vs. vs. Tahmin edebiliyorum. Çünkü bende vaktiyle tesadüfen yaptığımda şöyle demiştim "haa, demekki D7'de bu iş olmuyor D2005 te oluyor". Oysaki yalan :D

Ben kendi web servislerimi kullanırken, ilk başlarda web sitesine koyuyor sonra, WSDL sini web'ten import ediyordum. Ama ne hikmetse Delphi de çalışmıyordu. Gönderdiğim tüm parametlerin hepsi SIFIR değer içeriyordu. O google senin bu yahoo benim günlerce aradım olmadı.

Bir gün WDSL isteğini kendi localhostumdan istedim. ve servis çalıştı. Bir kaç ay öncesine kadar böyle kullanmaya devam ettim.

Tabi create ederken şunu yaptım.

WS := GetTMServicesSoap(False, 'http://www.xxxxx.com/serv.asmx', RIO);

Şelinde. Çünkü WDSL importer ile localhostumdan okuma yaptım. Herkesinbenim localhostuma erişemeyeceği için, webdeki URL'sini yazdım. Tabi burda RIO'u bileşenini sadece Türkçe karakterler için kullandım. Japonca, Çince vs. diller ile yazılmş metinlerin düzgün gitmesi için. Yoksa gönderilen parametrelerin SIFIR gitmesinde bir faydası yok.

Her neyse ben sorunumu çözmüştüm. Ama kafama da takıldı, ne fark vardı da localhost'tan import ettiğim WSDL ile uzak web'den import ettiğim WSDL uyumsuzdu.

Satırları tek tek kontrol ettim. ve minik bir şey farkettim.:
ioDocument

Evet local'den import edilen WSDL içinde initialization kısmında InvRegistry.RegisterInvokeOptions(TypeInfo(TMServicesSoap), ioDocument); şeklinde bir satır oluyordu. Ama web'ten import ettiğimde ise bu satır olmuyordu. Bu satır olmadığında hiç bir şekilde gönderilen parametlerin hepsi SIFIR gidiyordu.

Sorunu iki şekilde düzeltebiliyordum artık.

Ya formun FormCreate kısmına ya da gelen WDSL dosyasının initialization bölümüne bu satırı koyarak sorunu çözdüm. sizde deneyin göreceksiniz. HTTPRIO falan koymanıza da gerek yok.

Ben anlamadım falan diyorsanız, arkadaşımızın gönderdiği kpspublic.pas'ı kullanın derim. ayrıca WSDL import yapmayın. Çünkü orada bahsettiğim satır var.

Şimdi asıl bomba geliyor;
Sorunun temelinde .NET 1.1 ile .NET 2.0 arasındaki farktan yatıyormuş. benim localhostumda .NET 1.1 freamework yüklü. Satın aldığım hosting firması işgüzarlığından :D hemen .NET 2.0 yüklemiş. Aynen tckimlik.nvi.gov.tr'dekilerin gibi. Ve bu bir BUG'dır. D7 ve D2005'te bunu yaşadım. VB.NET, ya da visual studio ile bunu hiç bir zaman yaşamadım.

Pek emin değilim ama D7 ve D2005 updateleri ile bu düzeltilmiş olması gerekiyor. D2006'da durum nedir hiç bilmiyorum. Daha kurmak nasip olmadı.

Bu nedenle bu tip web servislerinden WSDL import ederken aklınızda olsun belirttiğim satır olmalıdır.

InvRegistry.RegisterInvokeOptions(TypeInfo(TXXXServisSoap), ioDocument);

ya da TC KİMLİM için

InvRegistry.RegisterInvokeOptions(TypeInfo(KPSPublicWebServiceSoap), ioDocument);

Herkese saygılar ve selamlar..
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Re: Aslında sorun şu..

Mesaj gönderen fduman »

muratdicle yazdı:Arkadaşımız düzelttiğim dediği kodu, inanın bana tesadüfen yapmıştır.
Bunun için TC web servisini yazan yazılımcı ile görüştüm ve verilerin UTF8 gelmesi gerektiğini söyledi. Tesadüf falan değil. Programlama tesadüflerle yapılmaz. Akıl ve mantık ile yapılır. Sen tesadüfen bulduysan birşey diyemem.
Sakın kızmasın bana çünkü, WSDL'yi diske kaydetmiş denemiş, bir kpspublic.pas içinde bir iki yeri dğeiştirmiş. vs. vs. Tahmin edebiliyorum. Çünkü bende vaktiyle tesadüfen yaptığımda şöyle demiştim "haa, demekki D7'de bu iş olmuyor D2005 te oluyor". Oysaki yalan :D
Ben öyle birşey demedim, çünkü Delphi 7 de gayet güzel çalıştırdım.

Kolay gelsin.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Re: Aslında sorun şu..

Mesaj gönderen fduman »

muratdicle yazdı:Sorunun temelinde .NET 1.1 ile .NET 2.0 arasındaki farktan yatıyormuş. benim localhostumda .NET 1.1 freamework yüklü.
Aslında sorunun temelinde Borland SOAP bileşeni ile .NET framework Web servis bileşenleri arasında tam uyumun bulunmaması var. TC Kimlik Web Servisi .NET ile yazılmış bir servis ve Microsoft her alanda olduğu gibi bu alanda da standartlara uygun davranmıyor. Kendi veri yapılarını SOAP içine gömüyor. Şu an SOAP için birden fazla standart mevcut.

Borland'da henüz tümünü destekleyen bir SOAP bileşeni çıkarmayı başaramadı.
Aynen tckimlik.nvi.gov.tr'dekilerin gibi. Ve bu bir BUG'dır. D7 ve D2005'te bunu yaşadım. VB.NET, ya da visual studio ile bunu hiç bir zaman yaşamadım.
Daha önce belirttiğim gibi bu bir bug değil. Microsoft'un standart dışı API'si yüzünden RIO'nun tek property'sini düzelterek çözülebiliyor. Yine Borland bileşenlerinin esnekliği bunu bize sağlıyor.
Cevapla