繁体   English   中英

如何使用WCF服务通过SOAP将大型Zip文件(50MB)传输到任何客户端?

[英]How to transfer a large Zip file (50MB) using a WCF Service through SOAP to any client?

我有一个WCF服务,它返回一个带有Zip文件(50MB)的字节数组给任何请求它的客户端。 如果Zip非常小(比如1MB),则SOAP响应来自WCF,其中嵌入了字节数组。 但即使对于1MB的文件,响应大小也非常大。 如果我尝试传输50MB文件,服务会挂起并抛出内存不足异常,因为SOAP响应变得非常大。

  1. 当我发回一个字节数组时,WCF / Web服务可用于传输大文件(主要是ZIP格式)的最佳选项是什么。 是否有任何好方法而不是发回文件?

  2. WCF / Web服务是否是将大型文件传输到任何客户端的最佳方式,还是有其他更好的选项/技术可用,以便实现10,000个用户的互操作性和可扩展性?

我的Ccode如下:

        String pathfordownload = @"D:\New Folder.zip";
        FileStream F2D = new FileStream(pathfordownload, FileMode.Open,FileAccess.Read);
        BinaryReader binReader = new BinaryReader(F2D);
        binReader.BaseStream.Position = 0;
        byte[] binFile = binReader.ReadBytes(Convert.ToInt32 (binReader.BaseStream.Length));
        binReader.Close();
        return binFile;

一份工作/真实的信息将非常有用,因为我正在努力应对Google提供的所有数据,并且上周没有取得好成绩。

您可以通过WCF传输 ,然后您可以发送(几乎)无限长度的文件。

我遇到了完全相同的问题。 内存不足是不可避免的,因为您使用的是Byte数组。

我们所做的是刷新硬盘驱动器上的数据,因此不受虚拟内存的限制,并发事务的容量就是高清空间。

然后为了转移,我们将文件放在另一台计算机上。 当然,在我们的例子中,它是服务器到服务器文件传输。 如果要从对等体中解除分离,可以使用http中的文件下载。

因此,您的服务可以使用http url响应文件位置,而不是使用文件进行响应。 然后,当客户端使用标准HttpRequest或WebClient成功下载服务器时,它会调用删除文件的方法。 在SOAP中可以是Delete(字符串url),在REST中,它将是资源上的delete方法。

我希望这对你有意义。 最重要的部分是了解在可扩展的软件中,特别是如果您正在查看10000个客户端(并发?),您可能不会使用有限的资源,如内存流或字节数组。 而是依赖于大型且易于扩展的资源,例如硬盘驱动器分区,最终可以在SAN上运行,IT可以根据需要增加分区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM