У меня работал веб-метод, который возвращал вызывающему массиву байтовый массив:
public byte[] DownloadPDF(string URI)
Мне пришлось изменить это, чтобы вернуть другой вывод (строку). Итак, я решил полностью изменить метод, теперь возвращая void и имея 3 таких параметра:
public void DownloadFile(string URI, out byte[] docContents, out string returnFiletype)
Мой веб-сервис компилируется правильно, но я подозреваю, что что-то не так со вторым параметром (т.е. байтовым массивом), потому что, когда я "Добавить веб-ссылку" и создаю свой прокси-класс, метод имеет только 2 параметра, а не 3):
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DownloadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("docContents", DataType="base64Binary")]
public byte[] DownloadFile(string URI, out string returnFiletype) {
object[] results = this.Invoke("DownloadFile", new object[] {
URI});
returnFiletype = ((string)(results[1]));
return ((byte[])(results[0]));
}
Я не понимаю, почему мой второй параметр, байтовый массив, игнорируется, но он, похоже, является источником проблемы.
Это, конечно, портит меня в приложении веб-клиента, где я получаю сообщение об ошибке во время компиляции:
No overload for method 'DownloadFile' takes '3' arguments
Вот код в веб-клиенте, где мне нужно передать 3 аргумента:
myBrokerASMXProxy.ASMXProxy.FileService client = new myASMXProxy.ASMXProxy.FileService();
byte[] fileDataBytes;
string fileType;
client.DownloadFile(URI, fileDataBytes, fileType);
Я подумываю о том, чтобы изменить его обратно, чтобы он возвращал байтовый массив и добавить только один параметр "out", но я подумал, что мне следует спросить вас об этом и в целом, каков наилучший способ обработки нескольких требований к выходным данным.