Я знаю, что стандарт XSD определяет тип данных с именем base64Binary .Это должно учитывать, что ваш [WebMethod]
параметр должен быть byte[]
.Затем базовый стек служб закодирует массив байтов в строку base64.
Например, я только что сделал быстрый Java-сервис, подобный этому
@WebMethod(operationName = "TestByteArray")
public void testByteArray(byte[] data) {
}
И соответствующие части сгенерированного WSDLвыглядеть так:
<operation name="TestByteArray">
<input wsam:Action="jordan.services/EncodingTests/TestByteArrayRequest" message="tns:TestByteArray"/>
<output wsam:Action="jordan.services/EncodingTests/TestByteArrayResponse" message="tns:TestByteArrayResponse"/>
</operation>
И
<xs:complexType name="TestByteArray">
<xs:sequence>
<xs:element name="arg0" type="xs:base64Binary" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Я также провел тест в .Net:
[WebMethod]
public void testByteArray(byte[] bytes) {
}
Соответствующие части сгенерированного WSDL:
<wsdl:portType name="TestWSSoap">
<wsdl:operation name="testByteArray">
<wsdl:input message="tns:testByteArraySoapIn"/>
<wsdl:output message="tns:testByteArraySoapOut"/>
</wsdl:operation>
</wsdl:portType>
А
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="testByteArray">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="bytes" type="s:base64Binary"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="testByteArrayResponse">
<s:complexType/>
</s:element>
</s:schema>
</wsdl:types>