我有一个 webmethod 工作,它返回一个字节数组给调用者:
public byte[] DownloadPDF(string URI)
我不得不改变它以返回另一个输出(一个字符串)。所以,我决定完全改变方法,现在返回 void 并有 3 个参数,如下所示:
public void DownloadFile(string URI, out byte[] docContents, out string returnFiletype)
我的 Web 服务编译正确,但我怀疑第二个参数(即字节数组)有问题,因为当我“添加 Web 引用”并构建代理类时,该方法只有 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]));
}
我不明白为什么我的第二个参数字节数组被忽略了,但它似乎是问题的根源。
这当然让我在 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”参数,但我认为我应该就此向专家询问,一般来说,处理多个输出要求的最佳实践是什么。