Массив байтов как выходной параметр не распознан - PullRequest
0 голосов
/ 16 марта 2009

У меня работал веб-метод, который возвращал вызывающему массиву байтовый массив:

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", но я подумал, что мне следует спросить вас об этом и в целом, каков наилучший способ обработки нескольких требований к выходным данным.

Ответы [ 2 ]

1 голос
/ 16 марта 2009

Почему бы вам не попробовать поставить эту подпись:

public bool DownloadFile(string URI, out byte[] docContents, out string returnFiletype)

Чтобы увидеть, что происходит? Я согласен с Джоном Скитом, но вы все равно можете вернуть бул с результатом операции

1 голос
/ 16 марта 2009

Массив байтов не игнорируется - вместо этого он используется в качестве возвращаемого типа. Я не знаю, почему он это делает, но, на мой взгляд, это имеет больше смысла. Я бы не использовал параметры в пустом методе. Я подозреваю, что прокси-генератор просто берет любой метод без параметров и превращает первый в возвращаемый тип.

...