字节数组作为输出参数无法识别

时间:2009-03-16 18:50:24

标签: c# parameters arguments return-value

我有一个webmethod工作,它将一个字节数组返回给调用者:

public byte[] DownloadPDF(string URI)

我不得不改变它以返回另一个输出(字符串)。所以,我决定完全改变方法,现在返回void并有3个这样的参数:

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

我的Web服务正确编译但我怀疑第二个参数(即字节数组)有问题,因为当我“添加Web引用”并构建我的代理类时,该方法只有2个参数,而不是3):< / p>

[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]));
    }

我不明白为什么我的第二个参数,即字节数组被忽略,但它似乎是问题的根源。

这当然会在Web客户端应用程序中让我感到困惑,我在编译时收到错误消息:

No overload for method 'DownloadFile' takes '3' arguments

以下是我需要传递3个参数的Web客户端中的代码:

myBrokerASMXProxy.ASMXProxy.FileService client = new myASMXProxy.ASMXProxy.FileService();

        byte[] fileDataBytes;
        string fileType;
        client.DownloadFile(URI, fileDataBytes, fileType);

我正在考虑将其更改为返回一个字节数组并仅添加一个“out”参数,但我认为我应该向专家询问这一点,一般来说,处理多个输出要求的最佳做法是什么。 / p>

2 个答案:

答案 0 :(得分:1)

不会忽略字节数组 - 而是将其作为返回类型。我不知道为什么会这样做,但在我看来它更有意义。我不会在void方法中使用参数。我怀疑代理生成器只接受带有out参数的任何方法,并将第一个转换为返回类型。

答案 1 :(得分:1)

为什么不尝试使用此签名:

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

看看会发生什么?我同意Jon Skeet,但你仍然可以通过操作结果返回一个bool