我試圖消耗它具有以下XSD包含具有單字節序列屬性的complexType服務,Bug?
<xs:simpleType name="SimpleByteType"> <xs:restriction base="xs:unsignedByte"/> </xs:simpleType> <xs:complexType name="ArrayOfBytes"> <xs:sequence> <xs:element name="SimpleByteType-item" type="tns:SimpleByteType" /> </xs:sequence> </xs:complexType>
<xs:element name="ArrayOfBytes" nillable="true" type="tns:ArrayOfBytes"/>
當我從這項服務中,我得到了下面的錯誤請求數據服務(內置和Java的託管)使用WCF:
"Base64 sequence length (1) not valid. Must be a multiple of 4."
這是奇怪的是返回的XML是這樣的:
<ArrayOfBytes>
<SimpleByteType-item>0</SimpleByteType-item>
<SimpleByteType-item>1</SimpleByteType-item>
<SimpleByteType-item>2</SimpleByteType-item>
</ArrayOfBytes>
所以,它根本不是Base64編碼的。顯然,dotnet會消耗這個xsd,並使其成爲一個byte [],它應該包含導致錯誤的base64編碼數據。
我在這裏做錯了什麼,或者這是WCF解釋XSD的方式的錯誤?對於使用Base64編碼數據的正確識別將是base64Binary類型看:http://www.w3.org/2002/ws/databinding/examples/6/09/Base64BinaryElement/
這使我覺得這是一個錯誤的另一件事是改變從
<xs:restriction base="xs:unsignedByte"/>
的XSD(在它的限制),以
<xs:restriction base="unsignedInt"/>
解決了這個問題。這顯然應該與base64編碼的內容無關。
就我所見,您所引用的關注點是一個應該有單個值的字段(base64 encode byte [],其中各個字節一起構成一個值)。然而,問題出在一個複雜類型的元素中,這是一個單字節值的序列。第一個,只能是一個字節[]作爲.Net中的字段,而後者可以是列表以及它只是一些字節值,它們之間沒有任何關係。 –
thekip
2014-12-15 19:49:06