Наша ситуация: у нас есть Java-сервер, вот определение WebService:
@WebMethod(operationName = "upload")
void upload(
@WebParam(name = "User", partName = "User", header = true) String user,
@WebParam(name = "Pwd",partName = "Pwd",header = true) String password,
@WebParam(name = "Filename",partName = "Filename",header = true) String filename,
@WebParam(name = "Data", partName = "Data",targetNamespace = "http://") @XmlMimeType("application/octet-stream")
DataHandler data) throws InvalidRequestException, ServiceException;
Наш клиент написан на c #. Автоматически сгенерированный параметр запроса на стороне клиента Wcf для метода «upload»:
public partial class uploadRequest {
[MessageBodyMemberAttribute(Namespace="http://", Order=0)]
[XmlArrayAttribute(Form=XmlSchemaForm.Unqualified)]
[XmlArrayItemAttribute(Form=XmlSchemaForm.Unqualified, IsNullable=false)]
public Property[] Properties;
[MessageBodyMemberAttribute(Namespace="http://", Order=1)]
[XmlElementAttribute(Form=XmlSchemaForm.Unqualified, DataType="base64Binary")]
public byte[] Data;
public uploadRequest() {}
public uploadRequest(Property[] Properties, byte[] Data) {
this.Properties = Properties;
this.Data = Data;
}
}
Этот код работает хорошо, но нам нужен Data as Stream вместо байта [], потому что мы хотим загружать большие файлы. Теперь для потоковой передачи нам нужны «свойства», определенные для заголовка, а не для тела (и, естественно, некоторые изменения в файле конфигурации), но проблема в том, что это автоматически.
Мой вопрос: как мы можем заставить клиентскую часть wcf сгенерировать правильный код для нас? Или мы должны изменить серверную сторону, чтобы добиться этого?