Массив байтов как выходной параметр не распознан
-
19-08-2019 - |
Вопрос
У меня работал веб-метод, который возвращал вызывающему массиву байтовый массив:
public byte[] DownloadPDF(string URI)
Мне пришлось изменить это, чтобы вернуть другой вывод (строку). Итак, я решил полностью изменить метод, теперь возвращая void и имея 3 таких параметра:
public void DownloadFile(string URI, out byte[] docContents, out string returnFiletype)
Мой веб-сервис компилируется правильно, но я подозреваю, что что-то не так со вторым параметром (т.е. байтовым массивом), потому что, когда я & добавляю
[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 " параметр, но я подумал, что должен спросить вас об этом экспертов и в целом, какова наилучшая практика для обработки нескольких выходных требований.
Решение
Почему бы вам не попробовать поставить эту подпись?
public bool DownloadFile(string URI, out byte[] docContents, out string returnFiletype)
Чтобы увидеть, что происходит? Я согласен с Джоном Скитом, но вы все равно можете вернуть bool с результатом операции
Другие советы
Массив байтов не игнорируется - вместо этого он используется в качестве возвращаемого типа. Я не знаю, почему он это делает, но, на мой взгляд, это имеет больше смысла. Я бы не использовал параметры в пустом методе. Я подозреваю, что прокси-генератор просто берет любой метод без параметров и превращает первый в возвращаемый тип.