我的工作,提供了一個SOAP接口的系統上。其中一個將使用該接口的系統在Delphi 7中進行了編碼。該Web服務使用WCF(基本http綁定,SOAP 1.1)開發。德爾福SOAP信封和WCF
如果我使用SOAP UI(JAVA),服務工作正常。但是,德爾福似乎在這裏做特別的事情;)
這是消息怎麼看起來像SOAP UI:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.xxx.de/xxx">
<soapenv:Header/>
<soapenv:Body>
<ser:GetCustomer>
<!--Optional:-->
<ser:GetCustomerRequest> <!-- this is a data contract -->
<ser:Id>?</ser:Id>
</ser:GetCustomerRequest>
</ser:GetCustomer>
</soapenv:Body>
</soapenv:Envelope>
我不是一個Delphi開發人員,但我開發了一個簡單的測試客戶端來看看是怎麼回事錯誤。這是德爾福發送的SOAP信封。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://services.xxx.de/xxx">
<NS1:GetCustomer xmlns:NS1="http://services.xxx.de/xxx">
<GetCustomerRequest href="#1"/>
</NS1:GetCustomer>
<NS2:GetCustomerRequest id="1" xsi:type="NS2:GetCustomerRequest">
<Id xsi:type="xsd:int">253</Id>
</NS2:GetCustomerRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
WCF拋出一個錯誤是在德語...;)
居wurde DAS結束元素 「身體」 AUS命名空間 「http://schemas.xmlsoap.org/soap/envelope/」 erwartet。 Gefunden wurde「Element」NS2:GetCustomerRequest「aus Namespace」http://services.xxx.de/xxx「」。 Zeile 1,位置599
意味着像
身體預期。但是卻發現了元素「NS2:GetCustomerReques」。
現在我的問題是:我可以以某種方式改變Delphi創建信封的方式嗎?或者是讓WCF以這種消息格式工作的方式?任何幫助是極大的讚賞!
問題不在NS1 NS2部分。問題在於德爾福在製造結構上不正確的XML。看來,Web服務期待GetCustomerRequest被嵌套在GETCUSTOMER,但德爾福的客戶端沒有嵌套GetCustomerRequest元素。我不知道如何解決它。您是否使用WCF服務中的WSDL生成了Delphi客戶端? – 2010-03-18 22:17:58