Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过SOAP使用WCF服务将大Zip文件(50MB)传输到任何客户端?_C#_.net_Web Services_Wcf_Mtom - Fatal编程技术网

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

C# 如何通过SOAP使用WCF服务将大Zip文件(50MB)传输到任何客户端?,c#,.net,web-services,wcf,mtom,C#,.net,Web Services,Wcf,Mtom,我有一个WCF服务,它向任何请求它的客户机返回一个带有Zip文件(50MB)的字节数组。如果Zip非常小(比如1MB),SOAP响应来自WCF,其中嵌入了字节数组。但即使对于1MB文件,响应大小也是非常大的。如果我尝试传输50MB的文件,服务将挂起并抛出内存不足异常,因为SOAP响应的大小会变得很大 当我发回字节数组时,WCF/web服务传输大文件(主要是ZIP格式)的最佳选项是什么。有没有什么好的方法可以代替它来发回文件 WCF/web服务是否是将大型文件传输到任何客户端的最佳方式,或者是否有

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

  • 当我发回字节数组时,WCF/web服务传输大文件(主要是ZIP格式)的最佳选项是什么。有没有什么好的方法可以代替它来发回文件

  • WCF/web服务是否是将大型文件传输到任何客户端的最佳方式,或者是否有其他更好的选项/技术可供使用,以便实现10000个用户的互操作性和可扩展性

  • 我的代码如下:

            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;
    

    一个工作的/真实的信息将非常有用,因为我正在努力处理谷歌上所有可用的数据,上周没有得到好的结果。

    你可以传输一个,然后你可以发送(几乎)无限长的文件。

    我也面临着同样的问题。内存不足是不可避免的,因为您使用的是字节数组

    我们所做的是刷新硬盘上的数据,因此,不受虚拟内存的限制,并行事务的容量是HD空间

    然后为了传输,我们把文件放在另一台计算机上。当然,在我们的例子中,这是一个服务器到服务器的文件传输。如果您想与对等机解除耦合,可以使用http中的文件下载

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

    我希望这对你有意义。其中最重要的一点是要理解,在一个可伸缩的软件中,特别是当您查看10000个客户端(并发?)时,您可能不会使用有限的资源,如内存流或字节数组。而是依赖于大型且易于扩展的资源,如硬盘分区,该分区最终可能位于SAN上,并且可以根据需要扩展该分区