我有一个恼人的问题,我正在创建一个asp.net Web服务;此服务应公开现有库的功能,该服务允许用户通过调用服务上的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),但编译器也不允许我这样做,尽管它们属于同一类型! weired!
答案 0 :(得分:2)
问题是为了生成WSDL,Stream将尝试序列化,而不能这样做。
你对byte []的最初想法是正确的方法。
您不需要为Base64转换而烦恼,因为ASP.NET运行时已经为您完成了这项工作。
答案 1 :(得分:0)
这是解决方案。
不要在文件数据的参数中使用byte [],而是使用byte []的base64字符串represntation。
来自使用web服务的客户端,让它将byte []转换为base64字符串,然后将其传递给您的webservice调用。在服务器端,您应该接收字节数组的base64字符串并将其转换回byte []。
以下是.Net Framework中转换方法的参考资料。
From byte[] to Base64 - 用于网络服务客户端
链接文字:http://msdn.microsoft.com/en-us/library/dhx0d524.aspx
From Base64 to byte[] - 用于网络服务服务器
链接文字:http://msdn.microsoft.com/en-us/library/system.convert.frombase64string.aspx