Web servis SOAP envelope hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Web servis SOAP envelope hatası

Mesaj gönderen mepc »

Merhaba

Web servisten veri çekmeye çalışırken ekli hatayı alıyorum. İlk defa delphi ile web servis yazan biri olarak uzun süre web de araştırmama rağmen çözüm bulamadım. Örnek kodları ekte bulabilirsiniz.

Basit bir konu olabilir belki ancak buradan ileri geçemedim. Yardımlarınız için şimdiden teşekkürler

Hata mesajı:
DocumentElement
http://schemas.xmlsoap.ort/soap/envelope/:Envelope expected, :HTML found.
Dosya ekleri
Web_test.zip
(98.97 KiB) 72 kere indirildi
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Re: Web servis SOAP envelope hatası

Mesaj gönderen mepc »

Biraz mesafe kaydettim. Anladığım kadarıyla gönderdiğim soap içeriği istenen formata tam uymuyor. Şöyle ki: Header bilgisinin aşağıdaki formatta olması isteniyor.

Web servis header bilgisine kullanıcı adı ve şifre aşağıdaki gibi belirtilecektir.
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/ ... ssecurity-
secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>kullanıcı adı</wsse:Username>
<wsseTongueassword>parola</wsseTongueassword>
</wsse:UsernameToken>
</wsse:Security>

Ancak üretilen SOAP header bilgisi aşağıdaki şekilde:

Kod: Tümünü seç

<?xml version="1.0"?>
 
-<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
-<SOAP-ENV:Header>
-<NS1:Security SOAP-ENV:mustUnderstand="1" xmlns:NS1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
-<NS1:UsernameToken>
<Username xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">testusername</Username>
<NS1<img src="https://www.delphican.com/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_5">assword Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">testpassword</NS1:Password>
</NS1:UsernameToken>
</NS1:Security>
</SOAP-ENV:Header>
-<SOAP-ENV:Body xmlns:NS2="http://schemas.datacontract.org/2004/07/AnkaraSigorta.ExtApps.WS.Models">
-<CreateCustomer xmlns="http://ws.ankarasigorta.com.tr">
-<customer xsi:type="NS2:Customer">
<CitizenshipNumber xmlns="http://schemas.datacontract.org/2004/07/AnkaraSigorta.ExtApps.WS.Models">1234567890</CitizenshipNumber>
</customer>
</CreateCustomer>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Bu kodu istenen formata nasıl çevirebilirim acaba?
Bilgi paylaşıldıkça güzeldir.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Web servis SOAP envelope hatası

Mesaj gönderen ertank »

Merhaba,

WSDL içinde header bilgisi olmadığı için security header eklemeyi SOAP XML kısmınıa kod ile müdahale ederek yapmanız gerekli. Ekte sizin projenizin bunu yapacak şekilde düzenlenmiş halini bulabilirsiniz.

Ancak alınan hata mesajından anladığım karşı web servis SOAP XML yapısını başka bir formatta istiyor.

Eğer .NET örnek proje var ise bilgisayarınıza Fiddler Telerik Classic uygulamasını yükleyerek gelen giden paketleri inceleyip istenilen formatı tespit edebilirsiniz.

Bunu yaptıktan sonra ekteki örnek projede sadece security header eklenir iken siz komple bütün XML'i istenilen şekle getirip istekte bulunabilirsiniz.

Evet, direk kullanıma göre çok daha fazla kod yazmak gerekiyor bu şekilde ancak çoğunlukla sonuca varabiliyorsunuz.
Dosya ekleri
Web_test.7z
(55.82 KiB) 83 kere indirildi
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Web servis SOAP envelope hatası

Mesaj gönderen mkysoft »

wsse kismi ne kadar dogru emin degilim, epptavm icin daha once bir test kodu yazmistim ve calisiyordu. Suradan inceleyebilirisiniz.
Yontem olarak sunu izleyin, once servisi SOAPUI ile bir deneyin, calistigindan emin olun. Sonra SOAPUI icinde mock servis yaratarak delphi kodunuzu bu mock'a yonlendirerek olusan istegi yakalayin. Yakaladiginiz istegi degistirmeden SOAPUI uzerinden gondermi deneyin. Eger hata varsa iki istegi karsilastiriniz. xml icin prefixin (ns1, wsse) farkli olmasi onemli degildir, onemli olan namespacedir (http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd).
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Re: Web servis SOAP envelope hatası

Mesaj gönderen mepc »

Teşekkürler her iki cevabıda inceleyip, kontrol edeceğim.
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Re: Web servis SOAP envelope hatası

Mesaj gönderen mepc »

mkysoft yazdı: 08 May 2021 03:35 wsse kismi ne kadar dogru emin degilim, epptavm icin daha once bir test kodu yazmistim ve calisiyordu. Suradan inceleyebilirisiniz.
Yontem olarak sunu izleyin, once servisi SOAPUI ile bir deneyin, calistigindan emin olun. Sonra SOAPUI icinde mock servis yaratarak delphi kodunuzu bu mock'a yonlendirerek olusan istegi yakalayin. Yakaladiginiz istegi degistirmeden SOAPUI uzerinden gondermi deneyin. Eger hata varsa iki istegi karsilastiriniz. xml icin prefixin (ns1, wsse) farkli olmasi onemli degildir, onemli olan namespacedir (http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd).
SOAPUI ile servisi test ettim ve karşı tarafa doğru xml i göndererek cevap aldım. Ancak kendi kodumu buna çevirmek için HTTPRIO beforeexecute ve after execute olaylarını kullanmaya çalıştım, fakat yine hatalı cevap alıyorum.

Gönderilecek xml kodunu göndermeden önce nasıl değiştirebilirim. Ekteki uygulamada göndermeden önce oluşan xml kodu, benim değiştirdiğim halini ve SOAPUI den dönen ve benim gönderdiğim koda dönen metinleri gösterecek şekilde ekleme yaptım.
Dosya ekleri
Web_test_son.zip
(112.34 KiB) 78 kere indirildi
Bilgi paylaşıldıkça güzeldir.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Web servis SOAP envelope hatası

Mesaj gönderen mkysoft »

BeforeExecute olayinda yapabilirsiniz, Gordugum kadariyla zaten erismisiniz gonderilen xml'e. Forumda xml isleme ile ilgili orneklere bakabilirsiniz. Ancak wsse icin xml'i manuple etmenize gerek olmamasi lazim, verdigim ornekle cozulebilecegini dusunuyorum.
Gonderdiginiz kodu calistirmak her zaman mumkun olmuyor bu nedenle SOAPUI ve sizin gonderdiginiz xml'i paylasirsaniz daha iyi olur.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Re: Web servis SOAP envelope hatası

Mesaj gönderen mepc »

Sizin gönderdiğiniz kodu kullanarak sorunu çözdüm. Ancak çok uğraşmama rağmen fazladan karakter eklendiği için sürekli bad request cevabı alıyordum. Bu nedenle before execute olayında tamamen kendi oluşturduğum xml i kullandım.

Ancak SOAPUI çözümde çok ciddi yardımcı oldu.

Desteğiniz için çok teşekkür ederim.

Foruma 2008 yılında üye olmuştum, ilk dönemde ihtiyaç olduğunda çok faydalanıyordum. Uzun yıllar sonra yeniden destek alabilmek beni mutlu etti.
Bilgi paylaşıldıkça güzeldir.
Cevapla