2012-07-13 64 views
0

我已經使用WSDL創建了一個SOAP API,並且需要將文件的字節從客戶端傳輸到API的服務器。我在WSDL中使用unsignedBinary[]數組類型來描述要傳遞的數據。 WSDL描述如下:使用帶有base64編碼的unsignedByte

<complexType name="TByteArray"> 

<complexContent> 

<restriction base="soapenc:Array"> 

<sequence/> 

<attribute ref="soapenc:arrayType" n1:arrayType="xs:unsignedByte[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/"/> 

</restriction> 

</complexContent> 

</complexType> 

我想發送原始字節數據,這是給出錯誤。 現在我正在做一個base64編碼,同時使用soap API調用發送二進制數據。 如果我使用PHP客戶端發送數據,它工作正常,但當我使用Delphi應用程序發送數據時,它不工作。

你認爲二進制數據轉換爲Base64是使Delphi應用程序不允許發送數據? unsignedByes不允許傳輸到Base 64?有沒有人知道這個細節?

+0

,如果你發佈你的工作PHP代碼和你的破Delphi代碼這樣的人能指出你的差異這會更有用。 – 2012-07-13 18:18:52

+0

你需要使用unsignedByte嗎?就我個人而言,我通常只是將base64編碼數據作爲普通字符串值發送到SOAP消息中,在服務器端將其提取出來,並將其解碼回原來的二進制值。我不知道這在PHP中如何工作,但在Delphi/Java環境中它確實可以正常工作。 – Elling 2012-07-13 22:57:16

回答

0

感謝您寶貴的意見,但我已經解決了這個問題。 我刪除了下面的代碼和轉移的二進制「類型:XS:hexBinary的」

<part name="abData" type="xs:hexBinary"/>

和它的作品像魔術。 它的二進制轉換自動十六進制和接收服務器上再次轉換成二進制它自己...

感謝。