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
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

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..