Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WSDL - SOAP classes must derive from TRemotable hatası
#1
Merhaba,

Bir web servisten bilgi almaya çalışıyorum parametreleri gönderirken aşağıdaki hatayı alıyorum nedeni ne olabilir acaba. 
Alıntı:ESOAPDomConvertError Conversion from class TForm1 to SOAP is not supported - SOAP classes must derive from TRemotable


Ayarlar
HTTPRIO1=>WSDLLocation ilgili WDSL uzantısını yazdım.
HTTPRIO1 Pasword ve Username bilgileri girdim.


Kod
var
 Xml: tstringlist;
 Istek: binding.ZABCSGetLabelRequest;
 Sonuc: binding.ZABCSGetLabelResponse;
begin
 Istek.EbelgeA := '1';
 Istek.EbelgeB := '1';
 try
   Sonuc := binding.GetZABC_AB_LABEL(False, '', HTTPRIO1).ZwmGetLabel(Istek);
 except
   on E: Exception do
     ShowMessage(E.ClassName + ' Hata : ' +
       E.Message);
 end;

*Aynı WSDL'i Crome tarayıcıdan Browse WSDL eklentisi ile yukarıdaki parametrelerle test ettiğimde karşı taraftan gelen mesajları görebiliyorum.

Yardımlarınızı rica ederim.
Cevapla
#2
@pro_imaj SoapUI ile denediğinde aynı hatayı alıyormusun

Tam emin olmamakla birlikte bu hatayı alabileceğiniz yer gelen data yapısı ile sizdeki wsdl yapısı uyuşmuyor sanırım özellikle array dönen yapılarda yeni importlar sorun çıkarıyor önerim aynı importu imkan dahilindeyse 2007 ile oluşturmanızdır
Yada sakıncası yok ise wsdl linkini gönderin bendeki 2007 ile oluşturup size göndereyim
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
Fiddler tarzı bir program ile Browse WSDL ile delphiden giden xml 'i yakalayıp bi karşılaştırın. Sorunu tespit ettikten sonra gönderilen xml ile ilgili bir sorunsa xml'e müdahale etme şansınız mevcut.
WWW
Cevapla
#4
(08-11-2019, Saat: 15:31)adelphiforumz Adlı Kullanıcıdan Alıntı: @pro_imaj  SoapUI ile denediğinde aynı hatayı alıyormusun

Tam emin olmamakla birlikte bu hatayı alabileceğiniz yer gelen data yapısı ile sizdeki wsdl yapısı uyuşmuyor sanırım özellikle array dönen yapılarda yeni importlar sorun çıkarıyor önerim aynı importu imkan dahilindeyse 2007 ile oluşturmanızdır
Yada sakıncası yok ise wsdl linkini gönderin bendeki 2007 ile oluşturup size göndereyim

SoapUI ile sorunsuz çalışıyor.
Wsdl linkini vpn aracılığıyla açtırıyorlar bundan dolayı sizde çalışmayacaktır.

(08-11-2019, Saat: 16:14)sadettinpolat Adlı Kullanıcıdan Alıntı: Fiddler tarzı bir program ile Browse WSDL ile delphiden giden xml 'i yakalayıp bi karşılaştırın.  Sorunu tespit ettikten sonra gönderilen xml ile ilgili bir sorunsa xml'e müdahale etme şansınız mevcut.

Konuya tam hakim değilim araştırayım dediğinizi.
Cevapla
#5
Fiddler yoksa bile soapui de zaten giden xmli görebiliyorsunuz , delphide ise httprio bileşeninin BeforeExecute metodunda gönderilen xml'e ulaşabiliyorsunuz. Buralardan giden gelen xml i karşılıklı kontrol ederek sorunu tespit edebilirsiniz.
WWW
Cevapla
#6
(08-11-2019, Saat: 16:44)sadettinpolat Adlı Kullanıcıdan Alıntı: Fiddler yoksa bile soapui de zaten giden xmli görebiliyorsunuz , delphide ise httprio bileşeninin BeforeExecute metodunda gönderilen xml'e ulaşabiliyorsunuz. Buralardan giden gelen xml i karşılıklı kontrol ederek sorunu tespit edebilirsiniz.

BeforeExcute olayına girmeden bu hataya düşüyor, parametre gönderirken yanlışlık yapıyor olabilirim ama orada da bir şey bulamıyorum. Huh
Cevapla
#7
(08-11-2019, Saat: 17:05)pro_imaj Adlı Kullanıcıdan Alıntı:
(08-11-2019, Saat: 16:44)sadettinpolat Adlı Kullanıcıdan Alıntı: Fiddler yoksa bile soapui de zaten giden xmli görebiliyorsunuz , delphide ise httprio bileşeninin BeforeExecute metodunda gönderilen xml'e ulaşabiliyorsunuz. Buralardan giden gelen xml i karşılıklı kontrol ederek sorunu tespit edebilirsiniz.

BeforeExcute olayına girmeden bu hataya düşüyor, parametre gönderirken yanlışlık yapıyor olabilirim ama orada da bir şey bulamıyorum. Huh

o zaman delphi doğru import edemiyordur servisi. biraz daha güncel bir versiyon ile denemek ya da import ederken bazı parametreler ile oynamak gerekebilir.
WWW
Cevapla
#8
WSDL tarafında LabelCount'un tipi delphi tarafındaki karşılığı string yani aşağıdaki gibi.
numeric4  =  type string; 

Aynı tipte Count isminde bir değişken tanımlıyorum ve tipinide numeric4 olarak tanımlayıp 2 değeri veriyorum, sorun olmuyor fakat aşağıdaki gibi Istek.LabelCount := Count; dediğimde aşağıdaki hata oluşuyor. Sanırım veri tipleriyle ilgili sorun yaşanıyor.
qYIWBj.png

procedure TForm1.Button1Click(Sender: TObject);
var
Count : numeric4;
begin
Count  := '2';
Istek.LabelCount := Count;
Cevapla
#9
istek adlı nesne create edilmemiş sanki.
WWW
Cevapla
#10
(10-11-2019, Saat: 23:40)sadettinpolat Adlı Kullanıcıdan Alıntı: istek adlı nesne create edilmemiş sanki.

Create edilmiş durumda hocam, ilk soruda yazmıştım tekrar yazmadım sadece.

Debug modda baktığımda "Inaccessible value" erişilemez değer yazdığından olabilir belkide, fakat ilgili firmanın dokümanda; Çıktı sayısını almak için bu alana değer gönderin yazıyor.

Birde sizin yazdığınız önceki cevapta WSDL import ederken farklı ayarları deneyin yazmıştınız. Birkaç deneme yaptım fakat o kadar çok ayar var ki bir türlü sonuca ulaşamadım.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Birden fazla WSDL servisin otomatik güncellenmesi Abdullah ILGAZ 4 205 27-05-2020, Saat: 12:38
Son Yorum: Abdullah ILGAZ
  OrangeUIStyles Kurulum hatası serdar 18 2.511 10-05-2020, Saat: 22:39
Son Yorum: ilhanim
  [ÇÖZÜLDÜ]Chart Hatası hk. wiseman 5 348 05-05-2020, Saat: 17:50
Son Yorum: wiseman
  internal server error (500) hatası.. enigma 13 1.891 31-03-2020, Saat: 09:58
Son Yorum: vkamadan
  Json Parse hatası arsl01 2 464 04-01-2020, Saat: 18:31
Son Yorum: arsl01



Konuyu Okuyanlar: 1 Ziyaretçi