0

我有一个恼人的问题,我正在创建一个 asp.net 网络服务;该服务应该公开现有库的功能,该服务允许用户通过调用服务上的 UploadFile 方法将文件上传到我们的服务器。这是 UploadFile 方法的签名

public bool UploadFile(string bucketName, string desiredFileName, System.IO.Stream fileData)


现在,当我尝试调用此方法并将引用要上传的文件的 System.IO.Stream 对象传递给它时,我得到一个编译时错误,表明传入的类型(System.IO.Stream)不是预期类型(Mynamespace.ServiceReference.Stream)。我试图将我的流显式转换为类型(Mynamespace.ServiceReference.Stream),但编译器也不会让我这样做,尽管它们是相同的类型!奇怪!

4

2 回答 2

2

问题是为了生成 WSDL,Stream 将尝试序列化它无法执行的操作。

您最初对 byte[] 的想法是正确的方法。

您无需费心进行 Base64 转换,因为 ASP.NET 运行时已经为您完成了这项工作。

于 2009-05-14T13:24:44.440 回答
0

这是解决方案。

不要在文件数据的参数中使用 byte[],而是使用 byte[] 的 base64 字符串表示。

从使用您的 Web 服务的客户端,让它将 byte[] 转换为 base64 字符串,然后将其传递给您的 Web 服务调用。在服务器端,您应该收到字节数组的 ba​​se64 字符串并将其转换回 byte[]。

以下是 .Net Framework 中转换方法的参考。

从 byte[] 到 Base64 - 用于 web 服务客户端

链接文本:http: //msdn.microsoft.com/en-us/library/dhx0d524.aspx

从 Base64 到 byte[] - 用于 webservice 服务器

链接文本:http: //msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx

于 2009-05-14T13:25:49.307 回答