如何在两台计算机之间传递大量数据

时间:2010-08-25 07:43:58

标签: java wcf web-services

有哪些选项可以将大量数据从一台计算机传输到另一台计算机,而不是在同一局域网中。数据量大约是100Mb解压缩和2Mb压缩?另一个要求是,当我为此创建一个服务器(使用C#)时,Java客户端应该能够使用它。

  • WCF是否支持这样的内容?但是如果Java客户端无法使用它,我就不感兴趣了。
  • 这里还有什么其他策略?

6 个答案:

答案 0 :(得分:2)

我只是使用像HTTP或FTP这样常见的东西,因为会有很多现有的库来做这件事,你几乎可以保证不会出现兼容性问题。对于这些协议,2MB不是一个不合理的大量数据。

答案 1 :(得分:1)

这是一个有趣的问题。这个问题很简单。但有趣的是,这类问题是新的,它们之前并不存在。让我解释一下,但首先我要回答你的问题:

您应该使用旧时尚TCP流创建服务器和客户端。为了不腰带你需要以某种方式压缩流,这里使用你可以找到的最常见的压缩算法之一(任何人说Zip?)。现在你有一个独立于语言的协议。任何语言的客户都会工作,完成任务。同时为了保持跨平台,不要选择最好的压缩,选择最常见的压缩(这将是足够好的。)

现在为什么这类问题很有趣,他们会大规模展示OOP。人们理解并使用庞大的框架,并询问这个或那个框架是否可以为他们执行这个或那个简单的任务。在这里,我们已经失去了根基,我们已经失去了事物的内在运作,它不是用锤子而是用核导弹击中钉子。它超越了目标,它将产生巨大的应用程序,占用空间大,性能往往很差。

我认为,自OOP全面采用以来,这个问题的数量有所增加。就像新程序员只想学习这些新的大框架一样,框架会使世界观变暗。大框架绝对没有问题,它们很棒,但我认为在掌握了基础知识之前开始使用它们是错误的。这就像学习使用NASA航天飞机而不是学校版的塞斯纳私人飞机一样飞行。

答案 2 :(得分:0)

在C#中,您可以将对象序列化为XML并进行传输,另一方面,您可以将XML反序列化为对象。

就文件大小而言,您可以在解压缩xml之前以zipped或7z传输并在客户端上解压缩。

答案 3 :(得分:0)

WCF支持SOAP并包含XHTTP的可选JSON序列化。还有其他机制,但它们是以MS为导向的。您可以轻松地使用您创建的服务。但是,您将不得不考虑如何对数据进行编码,因为它将以非二进制数据友好方式(XML / JSON)触及数据。

您可能希望创建一个简单的http处理程序,它可以使用适当的mime标头等直接以zip方式返回数据。然后您应该能够使用Java客户端点击它。

答案 4 :(得分:0)

XMPP是另一种选择。您需要另一台服务器,但这可能是一个优势:客户端不需要知道服务器IP地址,服务器和客户端只需连接到XMPP服务器即可交换消息和文件。

相关链接(适用于Java):

答案 5 :(得分:0)

您没有提到要发送的数据类型。因此,为了保持简单,我将假设您有可以转换为字节数组的数据流。流的内容必须采用C#和Java都能理解的格式!

最佳选择是使用GZip流压缩数据流。应该在Java上支持Gzip。您可以将转换为字节数组的流作为WCF服务操作的响应发送。您可以使用默认文本编码将字节数组转换为Base64编码的字符串。如果您的Java客户端支持MTOM(它是Java支持的标准),那么您可以使用使用较小消息的MTOM编码。

如果您没有包含众所周知内容格式的流,则可以使用某种自定义数据。对于自定义数据,您必须使用XML的可互操作传输格式。使用XML将进一步增加数据的大小。在这种情况下,您应该考虑将数据传输分成多个调用。您还可以尝试在IIS 7.x中托管WCF服务,并利用其内置功能 - 压缩动态内容。如果您的Java客户端调用HTTP Accept-Encoding标头设置为compress的服务,gzip将自动压缩响应。请注意,只有.NET 4.0 WCF客户端才能使用此类服务​​。