2012-07-13 79 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"/>

和它的作品像魔术。 它的二进制转换自动十六进制和接收服务器上再次转换成二进制它自己...

感谢。