通过Internet将大型二进制文件从一台PC发送到另一台PC的最快方法是什么?

时间:2011-02-14 09:51:42

标签: c# .net wcf large-files large-file-upload

我需要通过Internet将大型二进制(2Gb-10Gb)数据从一台PC(客户端)发送到另一台PC(服务器)。首先,我尝试使用带有消息安全性的wsHttpBinding绑定在IIS中托管的WCF服务,但是花了很多时间(几天)这对我来说是不合适的。现在我考虑使用套接字编写客户端和服务器应用程序。它会更快吗?

最好的方法是什么?

由于

5 个答案:

答案 0 :(得分:9)

在这种情况下,对我来说普通的旧FTP是合适的。通过使用它,您将有机会恢复中断的传输,而无需从头开始重做。您需要考虑到由于某些原因导致大量下载中断的可能性。

答案 1 :(得分:4)

发送大量数据时,您受到连接带宽的限制。你应该注意连接中断。如果你不得不重新发送大量数据,那么小的中断会产生很大的影响。

您可以使用BITS,这会在后台传输数据,并将数据分成块。所以它会为你处理很多东西。

它取决于IIS(在服务器上),并且有一个客户端(API)来传输数据。因此,您无需读取或写入传输数据的数据的基础知识。

我不知道它是否会更快,但至少在制作单个HTTP或FTP请求时更可靠。你可以让它快速运行。

如果带宽有问题,而且无需通过互联网发送,您可以查看高带宽/低延迟连接,例如通过快递发送DVD。

您可以在CodeProject there is wrapper上使用.Net的BITS。

答案 2 :(得分:1)

嗯,带宽是你的问题,进入套接字甚至更低对你没有多大帮助,因为WCF开销对长二进制响应没有太大作用。也许你的选择是使用一些无损流压缩算法?如果您的数据是可压缩的(使用zip进行干运行,如果它缩小本地磁盘上的文件,您可以找到合适的流式算法)。顺便说一句,我建议提供简历支持:)

答案 3 :(得分:1)

通常最适合利用已经为此类事物编写的内容。例如FTP,SCP,rsync等

如果下载中断,FTP支持恢复,但不确定它是否支持恢复上传。 Rsync在这种情况下要好得多。

编辑: 可能值得考虑我不太熟悉的东西但可能是另一种选择 - 比特洪流?

另一个选择是使用UDT等协议库来推送您自己的客户端/服务器,这将比TCP性能更好。请参阅:http://udt.sourceforge.net/

答案 4 :(得分:0)

尽管与更高级别的框架相关的带宽开销有所增加,但我发现WCF文件传输作为一个流的速度非常快。通常与SMB上的常规文件传输一样快。我在一个会话中传输了数十万个小文件,其中包括有时更大的6-10gb更大的文件。从来没有任何重大问题超过任何形式的连接。

我非常喜欢它提供的接口。允许你做一些非常酷的东西,FTP不能,如远程或双工端点。您可以对双方的连接的每个方面进行编程控制,并且可以与文件一起传递消息。有趣的东西。

是的,如果您不需要所有这些东西,FTP快速而简单。