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.
Web servis SOAP envelope hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Web servis SOAP envelope hatası
- Dosya ekleri
-
- Web_test.zip
- (98.97 KiB) 72 kere indirildi
Bilgi paylaşıldıkça güzeldir.
Re: Web servis SOAP envelope hatası
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:
Bu kodu istenen formata nasıl çevirebilirim acaba?
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>
Bilgi paylaşıldıkça güzeldir.
Re: Web servis SOAP envelope hatası
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.
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
Re: Web servis SOAP envelope hatası
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).
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).
Re: Web servis SOAP envelope hatası
Teşekkürler her iki cevabıda inceleyip, kontrol edeceğim.
Bilgi paylaşıldıkça güzeldir.
Re: Web servis SOAP envelope hatası
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.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).
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.
Re: Web servis SOAP envelope hatası
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.
Gonderdiginiz kodu calistirmak her zaman mumkun olmuyor bu nedenle SOAPUI ve sizin gonderdiginiz xml'i paylasirsaniz daha iyi olur.
Re: Web servis SOAP envelope hatası
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.
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.